【问题标题】:Chrome executeScript function not workingChrome 的执行脚本功能不起作用
【发布时间】:2013-06-25 11:18:04
【问题描述】:

所以我有一个正在编写的扩展程序,当用户单击 pageAction 图标时,我正在尝试执行一个脚本。单击该图标时,该方法将调用 chrome.tabs.executeScript(...)。问题是 chrome.tabs.executeScript 函数没有执行,我不知道为什么。我知道我正在访问它调用 executeScript 的代码,因为那里出现了一个警报。这是我的一些代码:

ma​​nifest.json

{
  "manifest_version": 2,
  "name": "name here",
  "description": "description here",
  "version": "0.1",
  "permissions": [
    "<all_urls>",
    "tabs"
  ],
  "icons": {
    "16" : "images/icon16.png",
    "48" : "images/icon48.png",
    "128": "images/icon128.png" 
  },
  "background": {
    "scripts": ["js/check.js"]
  },
  "page_action": {
    "default_icon": {
      "19": "images/icon19.png",
      "38": "images/icon38.png"
    },
    "default_title": "default title here"
  }
}

js/check.js

chrome.tabs.onUpdated.addListener(checkForValidUrl);

function checkForValidUrl(tabId, changeInfo, tab) {
  if (tab.url.indexOf('g') > -1) {
    chrome.pageAction.show(tabId);
  }
};

chrome.pageAction.onClicked.addListener(function(tab) {
  alert("hello world"); //this code is executed...

  //...this code is not 
  chrome.tabs.executeScript(tab.id, {file: "save.js"}, function() {
    if(chrome.runtime.lastError) {
      console.error(chrome.runtime.lastError.message);
    }
  });
});

js/save.js

alert("hello world");

就像我在代码中所说的那样,我的 pageAction onClick 函数中的 hello world 有效。 executeScript 方法没有。任何关于正在发生的事情的想法都会有所帮助。

【问题讨论】:

  • 另外,在executeScript(...) 方法返回后应该触发的console.error(...) 代码永远不会被调用,所以这对我没有帮助。

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


【解决方案1】:

在我的代码中处理了很多不同的东西之后,我找到了解决问题的方法。错误似乎在{file: "save.js"} 的行中。当它在寻找save.js 时,它显然是在我的manifest.json 文件所在的顶级目录中寻找,而不是在我的代码所在的目录中。我不得不将我的代码更改为{file: "js/save.js"} 以便我的@ 987654325@文件待查。

【讨论】:

    【解决方案2】:

    根据the docs

    要将代码插入页面,您的扩展程序必须具有该页面的cross-origin permissions。它还必须能够使用chrome.tabs 模块。您可以使用清单文件的 permissions 字段获得这两种权限。

    因此您需要该网站的权限,即权限字段中的http://example.com/

    【讨论】:

    • 我在清单中添加了&lt;all_urls&gt; 权限,直到我的问题得到解决,但我仍然一无所获。没有显示代码响应或错误。
    • @mottese 文件是否存在?它是否包含错误?开发者控制台有错误吗?
    • 文件存在,它只包含alert("hello world"); 没有错误,开发者控制台什么也没有显示,即使我已经明确编写了要打印错误的代码。
    • @mottese 包含check.js的页面的开发者控制台怎么样? (一般是后台页面)
    • 我发现了错误。显然,当我写file: "save.js" 时,它正在查找包含我的清单文件的顶级目录。我必须将其更改为 file: "js/save.js" 才能找到该文件。
    猜你喜欢
    • 1970-01-01
    • 2017-08-31
    • 2013-04-05
    • 1970-01-01
    • 2011-03-29
    • 2013-07-07
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    相关资源
    最近更新 更多