gpt4 book ai didi

javascript - 在页面最顶部注入(inject) javascript\Anti iframe-buster

转载 作者:行者123 更新时间:2023-12-03 06:49:18 24 4
gpt4 key购买 nike

我正在开发一个扩展,有时会在 iframe 内显示一些网站。我已经绕过了 X-FRAME-OPTIONS 问题,但现在我陷入了简单 iframe buster 代码,例如:

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

我试图在页面的最顶部注入(inject)javascript来覆盖window.top对象,但是在document_start处已经来不及注入(inject)它了,即alert() 在buster 脚本运行之前永远不会被调用:

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 之前注入(inject)代码,因此这不是问题的原因。我在玩弄并尝试回答this question时已经验证了这一点.

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

您可以首先使用 manifest.json 中的 "content_scripts" 直接将脚本注入(inject)到所有相关 iframe,而不是使用编程注入(inject)。我尚未验证这一点,但 您也可以尝试使用 "blocking" 选项从 chrome.webRequest.onHeadersReceived 监听器注入(inject)脚本,这允许您同步处理请求 。您可能已经在监听 onHeadersReceived 以便删除 X-Frame-Options header 。


编辑:

无法在阻塞 onHeadersReceived 监听器中进行编程注入(inject)。 Chrome 返回有关缺乏权限的错误 - 可能是因为此时 URL 未知( header 可能会导致重定向)。

关于javascript - 在页面最顶部注入(inject) javascript\Anti iframe-buster,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37588058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com