【发布时间】:2014-02-19 15:34:38
【问题描述】:
我是 chrome 扩展开发的新手。我的示例代码运行不正常。 要求:在单击上下文菜单按钮时执行任何 jquery 脚本(比如 $("body").hide();)。
从代码来看,只有 jquery 部分不起作用。
我有以下文件:
manifest.json
{
"manifest_version": 2,
"name": "jQuery DOM",
"version": "1",
"permissions": [
"contextMenus","tabs","activeTab"
],
"background": {
"scripts": ["jquery.min.js","sample.js"]
},
"description": "Manipulate the DOM when the page is done loading",
"browser_action": {
"name": "Manipulate DOM",
"icons": ["icon.png"],
"default_icon": "icon.png"
},
"content_scripts": [ {
"js": [ "jquery.min.js", "background.js" ],
"matches": [ "http://*/*", "https://*/*"],
"run_at": "document_end"
}]
}
background.js
$("body").append('Test');
我在文件夹中有 icon.png,它加载得很好。 jquery.min.js 在同一个文件夹中
示例.js
alert("Extension loaded");
function genericOnClick(info, tab) {
alert("Tab "+tab.id);
chrome.tabs.executeScript(tab.id, {
file: "jquery.min.js",
allFrames: true
},function(){
alert("callback");
$("body").hide();
});
alert("Completed");
$("body").hide();
}
var contexts = ["page"];
for (var i = 0; i < contexts.length; i++) {
var context = contexts[i];
var title = "Test Page menu item";
var id = chrome.contextMenus.create({"title": title, "contexts":[context],
"onclick": genericOnClick});
console.log("'" + context + "' item:" + id);
}
background.js 有效! 所有警报工作文件,但 genericOnClick 的 .hide 功能不起作用。 即使我将代码从 sample.js 移动到 backgroud.js,它也不起作用。 你能告诉我哪里出错了吗?
【问题讨论】:
-
看起来您正在将内容脚本(在每个页面的上下文中运行)与后台脚本(在每个页面上的 chrome 上下文中运行)与浏览器操作(当您单击操作的图标时运行)结合起来)。你想做什么,你希望什么时候发生?
-
我希望当我单击上下文菜单项时 $("body").hide() 应该可以工作。
-
对我来说一切正常,除了后台脚本 (
sample.js) 不允许与 DOM 交互。我认为您需要向您的内容脚本发送消息(background.js- 应该重命名),并隐藏正文。而且您不需要浏览器操作。这能解决问题吗? -
@Teepeemm 我尝试准备带有动作的上下文菜单,但是这些带有动作的菜单在 backgroud.js 中不起作用。请原谅我的文件命名,它会造成混乱。关于浏览器操作,它在那里(至少对我来说)来测试插件是否有效。但是上面没有写任何操作。