在页面顶部注入JavaScript \ Anti iframe

我正在开发一个扩展,有时会在iframe中显示一些网站。 我已经绕过了X-FRAME-OPTIONS问题,但现在我坚持使用简单的iframe解决方案代码,例如:

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

我试图在页面顶部注入JavaScript以覆盖window.top对象,但是在document_start注入它已经太迟了,也就是说,在buster脚本运行之前从不会调用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>"]
});

有没有办法解决?

谢谢


该问题可能是由chrome.webRequest.onCompleted.addListener侦听器异步引起的

document_start 在创建任何DOM之前注入代码,所以这不是问题的原因。 我在玩耍的时候验证了这一点,并试图回答这个问题。

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

您可以直接使用manifest.json"content_scripts"将脚本注入所有相关的iframe,而不是使用程序化注入。 我没有验证过这一点,但你也可以尝试使用"blocking"选项从chrome.webRequest.onHeadersReceived监听器注入脚本,这允许您同步处理请求。 您可能已经在监听onHeadersReceived ,以便移除X-Frame-Options标头。


编辑:

禁止onHeadersReceived监听器中的编程注入是不可能的。 Chrome会返回一个关于权限不足的错误 - 可能是因为URL尚不知道(标头可能导致重定向)。

链接地址: http://www.djcxy.com/p/59041.html

上一篇: Inject javascript at the very top of the page \ Anti iframe

下一篇: Frame Busting in the ad industry