扩展can't访问窗口对象中的自定义函数
Extension can't access to custom functions in window object
当Chrome扩展试图通过Chrome.executeScript在窗口对象中获取自定义函数时,它一无所获。
例如:
选项卡ID:150
选项卡js:
window.customfunc = function(){return 'yeap';}
扩展的后台JS:
chrome.tabs.executeScript(150, { code: "console.log(window);" })
Manifest.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
,因此我们不能将window.customfunc
与chrome.executeScript
一起使用。
为什么会发生这种情况,我们该如何解决?谢谢
这是为了安全。内容脚本(background.js
正在执行)与选项卡的脚本(定义了customfunc
)隔离。您还可以获得额外的好处,即不必担心命名空间冲突(这就是您的问题所在)。
一种方法是创建
myscript.js,它说console.log(window)
然后使用内容脚本(或chrome.tabs.executeScript
)编写<script src='chrome.extension.getURL("myscript.js")'></script>
到选项卡的DOM。您还需要添加"web_accessible_resources": ["myscript.js"]
到你的清单。
但由于事情如此复杂,一个很好的问题是为什么您需要访问customfunc
。(你也可以看看https://stackoverflow.com/a/9517879/2336725更长的答案。)
相关文章:
- 调整窗口大小时,可拖动的对象会出现在容器外部
- 如何在选项卡上定义属性'的主窗口对象
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- 可以从Chrome扩展修改窗口对象吗
- 在Backbone.js中为窗口对象指定变量
- 从html锚元素传递窗口对象
- 如何在ReactJS中使用窗口对象
- 在angularJS中使用模态窗口时,在控制器之间共享对象数组
- HackReactor,编码窗口现在可以访问一个名为“”的对象;招生;使用名为“;showApp”;.调用此方法时不带任
- 在加载时调用时,窗口对象的某些变量丢失
- 是否可以模拟 qUnit 测试的窗口位置对象
- 清除 Javascript 中窗口对象中的自定义变量
- 为什么当我尝试将函数绑定到自身时,“this”对象仍然引用窗口
- 窗口对象属性返回一个dom节点
- 使用窗口对象练习我的对象文字函数
- 如何从Chrome扩展访问所有窗口对象
- “this”返回的是[对象窗口],而不是元素
- 将变量打印到控制台时出现意外字符串:[对象窗口]
- 当我提醒“;这个“;鼠标悬停在<td>[对象窗口]弹出-那是什么
- javascript[对象窗口]在一个concat字符串