html/js等前台页面debuger调试

本文介绍了五种JavaScript调试技巧,包括利用debugger语句手动设置断点、针对DOM节点变化触发断点、设置Ajax调用断点、模拟移动设备环境进行调试以及使用Audits工具提升网站性能。

1. debugger;

我以前也说过,你可以在JavaScript代码中加入一句debugger;来手工造成一个断点效果。
需要带有条件的断点吗?你只需要用if语句包围它:

复制代码 代码如下:
if (somethingHappens) {

  debugger;

}

但要记住在程序发布前删掉它们。

2. 设置在DOM node发生变化时触发断点

有时候你会发现DOM不受你的控制,自己会发生一些奇怪的变化,让你很难找出问题的根源。

谷歌浏览器的开发工具里有一个超级好用的功能,专门可以对付这种情况,叫做“Break on…”,你在DOM节点上右键,就能看到这个菜单项。

断点的触发条件可以设置成这个节点被删除、节点的属性有任何变化,或它的某个子节点有变化发生。

tumblr_inline_n1s6xpVmg21r2

3. Ajax 断点

XHR断点,或Ajax断点,就像它们的名字一样,可以让我们设置一个断点,在特点的Ajax调用发生时触发它们。

当你在调试Web应用的网络传输时,这一招非常的有效。

tumblr_inline_n1s7ceQ08c1r2

4. 移动设备模拟环境

谷歌浏览器里有一些非常有趣的模拟移动设备的工具,帮助我们调试程序在移动设备里的运行情况。

找到它的方法是:按F12,调出开发者工具,然后按ESC键(当前tab不能是Console),你就会看到第二层调试窗口出现,里面的Emulation标签页里有各种模拟设备可选。

当然,这不会就变成了真正的iPhone,只是模拟了iPhone的尺寸,触摸事件和浏览器User Agent值。


5. 使用Audits改进你的网站

YSlow是一个非常棒的工具。谷歌浏览器的开发者工具里也有一个非常类似的工具,叫Audits

它可快速的审计你的网站,给你提出非常实际有效的优化你的网站的建议和方法。

tumblr_inline_n1s76yISqv1r2

### 禁用浏览器或代码中的调试器 `debugger` 在实际开发调试过程中,有时会遇到网页代码中嵌入了 `debugger` 语句,这些语句会强制浏览器进入调试模式,导致页面执行暂停,影响调试或自动化操作。以下是几种禁用或绕过 `debugger` 的方法。 #### 1. 通过浏览器控制台覆盖 `debugger` 行为 可以通过重写 `debugger` 的执行逻辑来实现禁用。由于 `debugger` 是 JavaScript 的关键字,无法直接删除或重写,但可以通过函数覆盖的方式进行规避。例如,在浏览器控制台中运行以下代码: ```javascript (function() { const originalEval = eval; eval = function(code) { if (code.includes('debugger')) { code = code.replace(/debugger/g, ''); } return originalEval(code); }; })(); ``` 该代码通过拦截 `eval` 函数,过滤掉所有 `debugger` 关键字的执行,从而达到禁用效果。 #### 2. 使用浏览器扩展禁用调试器 可以借助浏览器扩展(如 **uBlock Origin** 或 **Tampermonkey**)来屏蔽或修改网页中的 `debugger` 语句。例如,在 **Tampermonkey** 中编写一个用户脚本,覆盖 `debugger` 的行为: ```javascript // ==UserScript== // @name Disable Debugger // @namespace http://tampermonkey.net/ // @version 0.1 // @description 禁用网页中的 debugger // @author You // @match *://*/* // @grant none // ==/UserScript== (function() { 'use strict'; // 覆盖 debugger window.debugger = undefined; // 拦截并移除包含 debugger 的脚本 const script = document.createElement('script'); script.textContent = ` (function() { const originalEval = eval; eval = function(code) { if (code.includes('debugger')) { code = code.replace(/debugger/g, ''); } return originalEval(code); }; })(); `; document.head.appendChild(script); })(); ``` 此脚本会在页面加载时自动注入,拦截并移除包含 `debugger` 的代码。 #### 3. 修改网页源码禁用 `debugger` 在本地环境中运行网页时,可以通过修改网页源码的方式直接删除或注释掉 `debugger` 语句。例如,将以下代码: ```javascript (function() { var a = new Date(); debugger; return new Date() - a > 100; })(); ``` 修改为: ```javascript (function() { var a = new Date(); // debugger; return new Date() - a > 100; })(); ``` #### 4. 使用浏览器开发者工具绕过 `debugger` 在浏览器开发者工具中,可以通过以下方式临时绕过 `debugger`: - **禁用断点**:在 **Sources** 标签页中,点击右上角的 **Deactivate breakpoints** 按钮(图标为蓝色的暂停按钮),可以临时禁用所有断点。 - **跳过当前断点**:在断点处点击 **Resume script execution**(播放按钮),跳过当前 `debugger` 语句。 - **修改代码**:在 **Sources** 标签页中,找到 `debugger` 所在的行,将其手动注释掉或删除。 #### 5. 使用浏览器启动参数禁用调试器 某些浏览器支持通过启动参数禁用调试器。例如,使用 Chrome 的 `--disable-debugger` 参数可以禁用调试器功能: ```bash chrome.exe --disable-debugger ``` 不过需要注意,此参数可能不适用于所有版本的 Chrome 或其他浏览器。 --- ### 绕过无限 `debugger` 的方法 对于无限 `debugger` 的情况,通常网页会通过定时器不断触发 `debugger` 语句,导致调试器无法正常运行。可以通过以下方式绕过: ```javascript (function() { var originalDebug = window.debugger; window.debugger = function() { // 空函数,覆盖原有 debugger 行为 }; })(); ``` 此外,也可以通过修改浏览器的 `Date` 对象,使 `debugger` 的判断逻辑失效。例如: ```javascript (function() { var originalDate = Date; Date = function() { return new originalDate(2020, 1, 1); // 固定时间 }; })(); ``` 这种方法适用于依赖时间差判断是否触发 `debugger` 的逻辑。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值