假设我在域boo
的外部JavaScript文件中有http://localhost/file.js
个函数:
file.js:
function boo() {
return 1;
}
如何从chrome扩展程序中的内容脚本调用boo
函数?
答案 0 :(得分:2)
您需要运行一个内容脚本,该脚本创建并注入一个调用页面<script>
函数的boo()
元素。
您的内容脚本应该包含以下内容:
function runBoo() {
var myBoo = document.createElement('script');
myBoo.id = 'myBoo'; //helpful for removing the element later, not required to work
myBoo.innerText = 'boo();'
document.body.appendChild(myBoo); //if you plan on calling boo() multiple times, don't forget to delete the previously added myBoo elements
}
window.onload = function() {
//call runBoo() from content whenever you want to run the page's boo() function
runBoo();
}
答案 1 :(得分:1)
根据Mozilla的这个doc:
内容脚本可以访问页面的DOM,当然,就像任何一样 页面已加载的脚本(页面脚本)。但内容脚本 与页面脚本隔离:
<强>理由:强>
这意味着内容脚本不会将对象泄露给网页, 可能会打开安全漏洞。
这意味着内容脚本可以创建对象而不必担心 关于它们是否可能与页面脚本添加的对象冲突。
<强>更新强>
@Xan是对的!谢谢Xan。 如果您需要与其他页面脚本添加的功能进行交互,则加载项的内容脚本与页面脚本之间的消息传递如下:
// main.js
var tabs = require("sdk/tabs");
var mod = require("sdk/page-mod");
var self = require("sdk/self");
var pageUrl = self.data.url("page.html")
var pageMod = mod.PageMod({
include: pageUrl,
contentScript: "console.log(unsafeWindow.foo);"
})
tabs.open(pageUrl);
其中foo是页面脚本添加的变量。