javascript - Chrome 扩展 -> 执行脚本 : function call doesn' work

标签 javascript google-chrome google-chrome-extension chromium

他是我的ma​​nifest.json:

{
  "name": "Page Redder",
  "description": "Make the current page red",
  "version": "2.0",
  "permissions": [
    "activeTab","*://*/*"
  ],
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  "browser_action": {
    "default_icon" : "icon.png",
    "default_title": "Make this page red"
  },
  "manifest_version": 2
}

这是可以运行的background.js(页面变成红色):

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

   chrome.tabs.executeScript(null, {code:'document.body.style.backgroundColor="red";'} );


});

如果我按以下方式更改background.js,它将无法工作:

function changeColor() {
    document.body.style.backgroundColor="red";

}

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

   chrome.tabs.executeScript(null, {code:';'}, function() {
      changeColor();
   });

});

Chrome 版本:38.0.2125.111

问题:我在这里做错了什么?为什么在executeScript中调用函数不起作用?

谢谢, 浣熊

最佳答案

您没有在 executeScript 中调用函数。

您正在其回调中调用该函数,该函数在原始(后台)页面中运行。它是一个描述“当 executeScript 完成时要做什么”的函数,而不是要运行的代码。

在您注入(inject)代码的页面中实际运行的代码是“;” (这显然什么也没做)。

可以 run a function defined in your code通过将其正确转换为字符串来使用 executeScript 。但请注意,它无法访问函数外部定义的变量。

<小时/>

我认为您尝试要做的是让代码接受参数(颜色)。您应该考虑使用Messaging,而不是每次都编写自定义代码。传递命令。

示例:添加包含以下内容的文件 content.js:

// Include guard: only execute once
if (!injected) {
  injected = true;
  init();
}

function init() {
  // Get ready to receive a command
  chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
    if(message.action == "colorBackground") {
      document.body.style.backgroundColor = message.color;
    }
  });
}

在您的后台,您可以执行以下操作:

chrome.tabs.executeScript(null, {file: "content.js"}, function() {
  // File executed, it's ready for the message
  chrome.tabs.sendMessage(null, { action: "backgroundColor", color: "green" });
}

关于javascript - Chrome 扩展 -> 执行脚本 : function call doesn' work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26633457/

相关文章:

javascript - 在网页右侧添加侧边栏,相应地调整大小和移动所有内容

javascript - 为什么 A 和 B 在 sort() 之后相等?

javascript - AJAX XHR请求onReadyStateChange事件顺序和次数澄清

javascript - 如何在 Typescript 和 React.js 中使用随机字段解析 JSON

html - Chrome 上的 Canvas drawImage 类型错误

css - 覆盖 Bootstrap 表格边框折叠样式

javascript - downloads.onChanged 的​​事件处理程序中出现错误 : TypeError: Cannot read property 'current' of undefined

javascript - 如何使用jquery获取多个相同类名的span值

google-chrome - 带有 SubjectAlternativeName (SAN) 的证书在 Google Chrome 中给出了 ERR_CONNECTION_RESET

javascript - 在推特流加载时加载 chrome 扩展脚本