Javascript console.log不';无法从chrome.tabs.executeScript工作

Javascript console.log不';无法从chrome.tabs.executeScript工作,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我需要在用户单击我的上下文菜单项后执行脚本 为此,我从我的背景js创建了上下文菜单: chrome.contextMenus.create({"title": title, "contexts": contexts, "onclick": genericOnClick}); 这似乎是意料之中的事。稍后,我尝试从genericOnClick执行脚本: chrome.tabs.executeScript(null, {c

我需要在用户单击我的上下文菜单项后执行脚本

为此,我从我的背景js创建了上下文菜单:

chrome.contextMenus.create({"title": title, "contexts": contexts,
                                       "onclick": genericOnClick});
这似乎是意料之中的事。稍后,我尝试从genericOnClick执行脚本:

chrome.tabs.executeScript(null, {code: "console.log('test 1');"}, function() {
      console.log("test 2");
  });
我可以看到“测试2”被打印到控制台,但“测试1”从未被打印。我做错了什么? 我尝试将console.log语句添加到单独的js文件中,但也无法打印:

chrome.tabs.executeScript(null, {"file": 'content_script.js'}, function() {
      console.log("test 2");
  });
注意:清单中未定义my content_script.js。我的清单如下所示:

{
  "name": "My First Extension",
  "version": "1.0",
  "manifest_version": 2,
  "description": "Sample extension",
  "page_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  },
  "permissions": [
    "http://*/*",
    "https://*/*",
    "tabs",
    "contextMenus"
  ],
  "background": {
    "scripts": ["sample.js"]
  },

  "icons": {
    "16": "icon16.png"
  }
}
先谢谢你

// addListener
chrome.browserAction.onClicked.addListener(function() {
    chrome.tabs.executeScript(null, {file: "content_script.js"}, function() {

        console.log("test 2");
    });
});


 // Context Menu
chrome.contextMenus.create({
    title: myTitle,
    contexts: ['page'],
    onclick: function (detail, tab) { fn(tab) }
});
所以,

或:


扩展中唯一可以访问控制台的代码是注入原始页面的内容脚本

从您的代码来看,似乎您正试图从后台脚本写入控制台。因此,要从后台页面写入控制台,您必须插入一个内容脚本来完成这项工作

在我的扩展中,我使用自己的函数从后台脚本向控制台写入消息。其代码如下所示:

function logMessage(msg){
    chrome.tabs.executeScript({code:"console.log('"+msg+"')"});
}
将上述函数定义为后台脚本中的第一个函数,并从后台脚本中的任何位置调用它,以将消息写入控制台


在您的情况下,您可以使用genericOnClick函数将消息写入控制台。

是的,您的代码可以正常工作,但如果我将document.body.style.backgroundColor='red'更改为某个console.log语句,它仍然无法工作。那么我应该如何调试代码呢?试试函数hi()sample ok?
// Functional structure
function hi() { alert("hi"); };

// hi function toString after run  function (hi)()
chrome.tabs.executeScript(null, { code: "(" + hi.toString() + ")()" });
function logMessage(msg){
    chrome.tabs.executeScript({code:"console.log('"+msg+"')"});
}