在页面顶部注入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尚不知道(标头可能导致重定向)。
上一篇: Inject javascript at the very top of the page \ Anti iframe