【问题标题】:DOM attribute change debuggingDOM属性变更调试
【发布时间】:2009-08-10 08:47:33
【问题描述】:

不知何故,在我的代码中,页面上的某个元素获得了一个我不希望它获得的样式属性。即,它得到 style="position:fixed"。我可以在 Firebug 的 HTML 选项卡中看到这种情况,但在代码中找不到。应用程序相当大,我不能简单地查看所有代码来找到位置,此外,正在使用几个第三方库(jQuery 就是其中之一)。

那么,我的问题是,是否有可能以某种方式捕捉到这种风格正在改变并得到追踪?

【问题讨论】:

  • 就我而言,是广告拦截器在做这件事(有人可能会觉得这很有帮助)。

标签: javascript debugging dom


【解决方案1】:

在 Google Chrome 中,右键单击页面中的元素并选择“检查元素”。开发人员工具窗口或窗格将打开,并在源视图中选择该元素。然后,您可以右键单击所选标签并选择“Break on Attributes Modifications”。

【讨论】:

  • 在页面重新加载或在 Angular 中更改视图时不起作用。
【解决方案2】:

好吧,经过几个小时的谷歌搜索和试验,似乎最好的人可以像这样设置MutationEvent 处理程序(Firefox 支持它们):

var node_modified = function(evt) {
    if(evt.attrName == 'style') {
        alert('Style is changing from ' + evt.prevValue + ' to ' + evt.newValue);
    }
}
var test_close = document.getElementById('test_close');
test_close.addEventListener('DOMAttrModified', node_modified, false);

然后在整个代码中设置某种日志记录并查看何时触发此事件。不幸的是,您不能只在突变事件处理程序中设置断点并查看堆栈跟踪,因为事件处理程序的堆栈跟踪没有关于代码中触发事件的位置的信息。有点合乎逻辑,但我认为通过一些黑客攻击可以在 Firebug 中实现此功能。

感谢您的宝贵时间!

【讨论】:

【解决方案3】:

在 Firebug 的 html 检查器中,您可以右键单击一个节点,并且可以选择在属性更改时中断。

断点会在页面重新加载时持续存在,您还可以浏览调用堆栈。

【讨论】:

    【解决方案4】:

    听起来你真的需要一个调试器。 Firebug has one built in,否则你可以试试Venkman,我觉得有点麻烦,但也许更有效..

    祝你好运! :)

    【讨论】:

    • 嗯,我用的是 Firebug,但是我找不到在属性发生变化的地方设置断点的方法,因为我不知道它在哪里,找到它正是我想在这里...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 2019-07-14
    • 2011-06-01
    相关资源
    最近更新 更多