【问题标题】:Chrome extension : Detect which script created an iframeChrome 扩展:检测哪个脚本创建了 iframe
【发布时间】:2016-12-18 21:10:02
【问题描述】:

我正在尝试使用 chrome.debugger 构建一个扩展以将页面请求显示为树。 我希望能够将创建它的脚本分配为动态 iframe 的父级,而不是它所在的框架。 为此,我想我需要插入一个 DOM 断点,使用 Chrome 调试协议的 DOMDebugger 域,但我找不到任何关于如何使用 setEventListenerBreakpoint 方法的示例。

使用以下代码:

chrome.debugger.sendCommand(
{tabId:currentTabId},'DOMDebugger.setEventListenerBreakpoint',{eventName:'subtree-modified'},function(a){
                console.dir(arguments);
            });

回调只被调用一次,以一个空对象作为参数。

我应该如何使用 setEventListenerBreakpoint?

【问题讨论】:

  • 对这个领域不熟悉,但可能需要Debugger.enablestackoverflow.com/questions/25764336/…
  • 通常,您可以按照文档developer.chrome.com/devtools/docs/debugger-protocol中描述的过程手动执行相关操作时看到调试器发送的命令
  • 好提示,@wOxxOm ..嗅探协议我能够找到我需要使用的正确函数(setDOMBreakpoint),这需要获取根节点 ID(DOM.getDocument) ,并监听“子树修改”事件。问题是,这个事件没有指定发生了哪些实际修改,或者在文档中插入了什么节点 ID,所以我无法知道它是否是 iframe,或者别的东西。所以,我想这只是不可能做我想要的。
  • DOM.getDocument 返回文档 nodeId。有了它,我可以调用 setDOMBreakpoint (nodeId,'subtree-modification'),它会被调用。然后,我使用 Debugger.getBacktrace(),我得到了我需要的关于脚本的所有信息。我在任何地方都没有得到,实际的子树修改是什么。我不知道是否添加了 iframe,或者删除了 div。
  • Welp,您必须使用普通的内容脚本,并按需附加 MutationObserver,它将通过后台页面报告更改。

标签: javascript iframe google-chrome-extension google-chrome-devtools


【解决方案1】:

最后,我使用一组不同的工具间接完成了它: - 获取每个页面请求(事件“Network.requestWillBeSent”) - 获取页面中的每个脚本(事件“Debugger.scriptParsed”)

如果页面请求有启动器,并且有可用的堆栈帧,我可以获取它导致该请求的脚本。 如果请求和脚本属于不同的frameId,则意味着脚本正在修改(生成请求),在不同的框架中。 所以我只是假设整个 iframe 是由该脚本创建的(需要其他条件,如 iframe url=="about:blank" 等) 我想在某些情况下这个假设是错误的,但这是我认为我能得到的更接近的情况。

【讨论】:

    猜你喜欢
    • 2011-09-28
    • 2012-03-07
    • 2011-11-02
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 2014-06-20
    相关资源
    最近更新 更多