chrome.tabs.create / executeScript>属于该页面的调用函数

时间:2014-12-07 07:07:54

标签: javascript google-chrome google-chrome-extension

我正在为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。"

我知道该功能确实存在,因为它存在于我自己网站上的代码中。

非常感谢任何帮助。谢谢!

1 个答案:

答案 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});
});

使用上面的代码你基本上会:

  1. 创建标签
  2. 将代码(变量c)作为内容脚本注入其中,该脚本将:
    1. 使用您要在页面上执行的代码创建一个脚本
    2. 在页面中注入脚本,因此,在页面上下文中运行其代码