我正在为Google Chrome开发扩展程序,而我遇到的问题是我需要能够调用属于在标签页中打开的网页的JavaScript函数。 / p>
有关详细信息,该网站是我的网站,因此我知道该功能确实存在。该函数基于字符串值执行很多操作。我希望用户能够在任何网页上突出显示文字,点击Chrome扩展程序中的一个按钮,自动加载我的网页,并使用突出显示的文字调用该功能作为其价值。
这是我到目前为止所得到的:
chrome.tabs.create({ url: "https://mywebsite.com" }, function (tab) {
var c = "initPlayer('" + request.text + "');"; ////'request.text' is the highlighted text which works
chrome.tabs.executeScript(tab.id, { code: c });
});
但Chrome控制台说:"未捕获的ReferenceError:未定义initPlayer。"
我知道该功能确实存在,因为它存在于我自己网站上的代码中。
非常感谢任何帮助。谢谢!
答案 0 :(得分:5)
这是因为 页面和内容脚本在两个单独的javascript上下文中运行。这意味着内容脚本无法直接访问页面中的函数和变量:您需要将脚本注入页面本身以使其正常工作。
这是一个简单的解决方案:
chrome.tabs.create({url: "https://mywebsite.com"}, function (tab) {
var c = "var s = document.createElement('script');\
s.textContent = \"initPlayer('" + request.text + "');\";\
document.head.appendChild(s);"
chrome.tabs.executeScript(tab.id, {code: c});
});
使用上面的代码你基本上会:
c
)作为内容脚本注入其中,该脚本将: