chrome extension:注入引用我也注入的脚本的代码 - 为什么失败?

时间:2011-11-28 08:55:01

标签: google-chrome-extension

我正在尝试在用户按下我的Chrome扩展程序时按需触发的任何页面上创建一个jquery弹出窗口。

我将权限设置为[“标签”,“http:// / ”,“https:// / ”]

我有一个背景页面,尝试执行以下操作:

chrome.browserAction.onClicked.addListener(function(tab) {

//chrome.tabs.executeScript(null, { code: "alert(document.title);" }, null);

chrome.tabs.executeScript(null, {file: "demo.js"}, null);

chrome.tabs.executeScript(null, { code: "document.body.appendChild(document.createElement('script')).src='demo.js'" }, null);
      });

如果我取消注释警报,则会在点击扩展程序图标时显示。 但随着评论,因为它没有做任何事情。

为什么失败了?

UPDATE 我通过引用url而不是本地资源(demo.js)设法使其工作。 现在,有效的代码如下所示:

chrome.tabs.executeScript(tab.id, { code: "document.body.appendChild(document.createElement('script')).src='http://iamnotagoodartist.com/stuff/wikiframe.js'" }, null); 

我的本​​地“demo.js”无论如何都是该网址内容的副本。 当我引用本地文件时,我不确定为什么它不起作用??

2 个答案:

答案 0 :(得分:0)

您没有将tab ID传递给executeScript,因此脚本会被注入到您无法与之交互的背景页面中。

chrome.tabs.executeScript(tab, {file: "demo.js"}, null);

答案 1 :(得分:0)

您必须使用chrome.extension.getURL获取“demo.js”文件的完整路径。

chrome.tabs.executeScript(null, { 
  code: "document.body.appendChild(document.createElement('script')).src='" + 
    chrome.extension.getURL("demo.js") +"';" 
}, null);

BTW如果您将tabId参数设置为null,则不会将脚本注入后台页面而是注入the selected tab of the current window