gpt4 book ai didi

javascript - 通过 Chrome 扩展避免跨源策略

转载 作者:行者123 更新时间:2023-11-30 20:07:00 25 4
gpt4 key购买 nike

站点 A 是一个带有 <iframe> 的网站包含站点 B。它在带有扩展名的 chrome 浏览器上运行。

我可以控制扩展程序。我想做的是让用户控制编辑网站 B 的部分内容。

当用户按下扩展程序上的按钮时将调用以下内容。目的是加载 jQuery,以便我可以使用它,定位页面上的 iframe,进入 iframe,然后更改其主体颜色。

chrome.tabs.executeScript(null, {file: 'assets/jquery.min.js'}, function () {
chrome.tabs.executeScript({
code: "jQuery('iframe').contents().find('body').css('backgroundColor', 'red');"
});
});

站点 A 和站点 B 位于不同的域中,因此同源策略生效。同样值得注意的是,站点 B 没有授予站点 A 的跨源访问权限。我也不是站点 A 或站点的所有者B 所以不能修改他们的跨源策略。

我希望当从扩展程序运行时,我能得到用户的更多同意,以便能够绕过同源策略并执行上述操作。

最佳答案

如果你想让你的脚本被注入(inject)到框架中,你可以使用 allFrames在页面的所有框架中注入(inject)代码的选项。

在运行代码之前,你必须检查你是在 A 还是 B 中:你可以通过比较 window.self 来做到这一点。与 window.parent .在顶部框架 (A) 中,它们将是同一个对象,但位于 <iframe> 中。 (像 B)那些会有所不同。

这里是:

chrome.tabs.executeScript(null, {file: 'assets/jquery.min.js', allFrames: true}, function () {
chrome.tabs.executeScript({
code: "if (self != parent) jQuery('body').css('backgroundColor', 'red');",
allFrames: true
});
});

注意:自 2021 年 1 月起,Manivest V3 使用 chrome.scripting.executeScript() 相反。

上面的代码将同时注入(inject)A和B,但只会在B中执行。如果A中有多个帧,您还必须使用例如window.location.hostname检查帧是否正确。 .

关于javascript - 通过 Chrome 扩展避免跨源策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52820558/

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