我需要在用户点击我的上下文菜单项后执行脚本。
所以为了这个目的,我从我的背景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");
});
注意:我的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"
}
}
提前谢谢。
答案 0 :(得分:1)
您的扩展程序中唯一可以访问控制台的代码是注入原始页面的内容脚本。
从您的代码中看起来您正试图从后台脚本写入控制台。因此,要从后台页面写入控制台,您需要注入内容脚本来为您完成工作。
在我的扩展程序中,我使用自己的函数从后台脚本向控制台写入消息。下面给出了相同的代码:
function logMessage(msg){
chrome.tabs.executeScript({code:"console.log('"+msg+"')"});
}
将上述内容定义为后台脚本中的第一个函数,并从后台脚本中的任意位置调用它,以将消息写入控制台。
在您的情况下,您可以使用 genericOnClick 功能将此消息写入控制台。
答案 1 :(得分:-1)
// 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) }
});
如此;
"permissions": [
"tabs", "http://*/*", "https://*/*"
]
chrome.tabs.executeScript(null,{code:"document.body.style.backgroundColor='red'"});
或:
// Functional structure
function hi() { alert("hi"); };
// hi function toString after run function (hi)()
chrome.tabs.executeScript(null, { code: "(" + hi.toString() + ")()" });