Nor*_*orx 4 javascript google-chrome contextmenu google-chrome-extension
我正在使用chrome.contextMenus.create
函数在我的Chrome扩展程序中创建上下文菜单.但它创造了额外的选择.
我在我的manifest.json
文件中给了权限,将此函数添加到我的background.js
文件中并将其添加到我的manifest.json
文件中.
为什么会这样?
function getword(info,tab) {
console.log("Word " + info.selectionText + " was clicked.");
chrome.tabs.create({
url: "http://www.google.com/search?q=" + info.selectionText,
});
}
chrome.contextMenus.create({
title: "Search: %s",
contexts:["selection"],
onclick: getword,
});
Run Code Online (Sandbox Code Playgroud)
您的后台代码将执行多次 - 至少在每次浏览器启动/扩展重新加载时,并且最多每次一个事件页面("persistent": false
)唤醒.
chrome.contextMenus.create
做它在锡上说的 - 创造一个新的条目.每次运行.哪个会好的,因为通常你想在扩展程序运行时设置所有内容,但是上下文菜单条目实际上在扩展重新加载之间仍然存在 - 所以它们不断堆积.
这里有两种方法:
为上下文条目分配ID(这是一个任意字符串); 在这种情况下,create
再次使用相同的ID进行调用覆盖它 引发错误,而不是创建新错误.
chrome.contextMenus.create({
title: "Search: %s",
id: "search",
contexts:["selection"],
onclick: getword,
});
Run Code Online (Sandbox Code Playgroud)
无论如何,这对于稍后操纵/引用该条目是有用的.
在致电之前擦除您的上下文菜单条目create
:
chrome.contextMenus.removeAll(function() {
chrome.contextMenus.create({
// ...
});
});
Run Code Online (Sandbox Code Playgroud)
这似乎是多余的,但这是确保扩展程序以前版本中的"旧"上下文菜单条目不会延迟的最简单方法.
当然,你可以将两者结合起来.
还有几点评论:
如果您实际上正在使用" "persistent": false
事件"页面,请注意onclick
不允许使用属性,因为它将被扩展卸载无效.更健壮的方法是使用chrome.contextMenus.onClicked
事件 - 菜单项的ID将传递给它以区分选项.
由于您很少需要更新上下文菜单项,因此最好将它们隐藏在相应的事件中,chrome.runtime.onStartup
和/或chrome.runtime.onInstalled
.
但是,请注意,在非常罕见的情况下,您将自己打开一个错误:
在这种情况下,任何事件都不会发生.这是一个错误.
归档时间: |
|
查看次数: |
1095 次 |
最近记录: |