在页面顶部注入javascript \ Anti iframe-buster

时间:2016-06-02 09:38:55

标签: javascript iframe google-chrome-extension

我正在开发一个扩展程序,有时会在iframe中显示一些网站。我已经绕过了X-FRAME-OPTIONS问题,但现在我仍然坚持简单 iframe破坏代码,例如:

if (top != self) {
   document.getElementsByTagName("html")[0].style.display = "none";
   top.location.replace(location);
}

我正在尝试在页面的顶部注入javascript以覆盖window.top对象,但是document_start已经来不及注入它,即alert()之前从未被调用过破坏者脚本运行:

chrome.webRequest.onCompleted.addListener(function(details) {
    if (isEnabled) {
        chrome.tabs.executeScript(details.tabId, {frameId: details.frameId, runAt: "document_start", code: "alert('asas');"});
    }
}, {
    types: ["sub_frame"],
    urls: ["<all_urls>"]
});

有什么方法吗?

谢谢

1 个答案:

答案 0 :(得分:1)

问题可能是chrome.webRequest.onCompleted.addListener侦听器异步

造成的

document_start在创建任何DOM 之前注入代码,因此这不是导致问题的原因。我在玩游戏并试图回答this question时验证了这一点。

这里的问题是chrome.webRequest.onCompleted.addListener是异步的,这意味着当执行回调(以及你的chrome.tabs.executeScript)时,浏览器已经开始构建DOM。

您可以首先使用"content_scripts"中的manifest.json直接将脚本注入所有相关的iframe,而不是使用编程注入。我还没有验证这一点,但是你也可以尝试使用chrome.webRequest.onHeadersReceived选项从"blocking"监听器注入脚本,这允许你同步处理请求。您可能已经在监听onHeadersReceived,无论如何都要删除X-Frame-Options标题。


修改

阻止onHeadersReceived侦听器中的编程注入是不可能的。 Chrome会返回有关权限不足的错误 - 可能是因为此时尚未知道此URL(标头可能会导致重定向)。