gpt4 book ai didi

javascript - 扩展无法访问窗口对象中的自定义函数

转载 作者:行者123 更新时间:2023-11-29 18:22:02 25 4
gpt4 key购买 nike

当 Chrome 扩展试图通过 chrome.executeScript 获取窗口对象中的自定义函数时,它什么也得不到。

例如:

标签编号:150

标签页:

window.customfunc = function(){return 'yeap';}

扩展后台JS:

chrome.tabs.executeScript(150, { code: "console.log(window);" })

list .json:

{
"background": {
"scripts": [ "background.js" ]
},
"content_scripts": [ {
"exclude_globs": [ ],
"exclude_matches": [ ],
"include_globs": [ "*://*/*" ],
"js": [ "script.js" ],
"matches": [ "http://*/*" ],
"run_at": "document_idle"
} ],
"content_security_policy": "script-src 'self' https://ssl.google-analytics.com; object-src 'self'",
"description": "Test",
"manifest_version": 2,
"name": "Workspace",
"permissions": [ "unlimitedStorage", "notifications", "clipboardWrite", "notifications", "clipboardRead", "management", "tabs", "history", "cookies", "idle", "storage", "webRequest", "webRequestBlocking", "contentSettings", "*://*/*" ],
"version": "1.0"
}

结果:

在控制台中,window 对象不显示 customfunc,所以我们不能在 chrome 中使用 window.customfunc .executeScript.

为什么会发生这种情况,我们该如何解决?谢谢。

最佳答案

这是为了安全。内容脚本(background.js 正在执行)与选项卡的脚本(customfunc 已定义)隔离开来。您还可以获得额外的好处,即不必担心 namespace 冲突(这是您遇到麻烦的地方)。

一种方法是创建
myscript.js
console.log(window)
然后使用内容脚本(或 chrome.tabs.executeScript )编写
<script src='chrome.extension.getURL("myscript.js")'></script>
到选项卡的 DOM。您还需要添加
"web_accessible_resources": ["myscript.js"]
到你的 list 。

但是对于这么复杂的事情,一个很好的问题是为什么您需要访问 customfunc . (您也可以查看 https://stackoverflow.com/a/9517879/2336725 以获得更长的答案。)

关于javascript - 扩展无法访问窗口对象中的自定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17580769/

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