Zhi*_*anc 9 javascript google-chrome google-chrome-extension
我正在使用以下方法从非持久性后台脚本添加上下文菜单项:
chrome.contextMenus.create({
title: 'Get Code',
id: 'myUniqueIdForThisExtension123',
contexts: ['all'],
onclick: onClickHandler
});
function onClickHandler() {}
Run Code Online (Sandbox Code Playgroud)
该文件只是规定:
分配给此项目的唯一ID.对事件页面必须提供.不能与此扩展程序的另一个ID相同.
所以我添加了一个唯一的ID,但我仍然无法使其工作.上下文菜单中没有插入任何新内容.
Mar*_*lli 20
你说你有一个非持久性的背景页面,所以你应该有一个如下所示的manifest.json文件:
{
"manifest_version": 2,
"name": "My extension",
"description": "My description",
"version": "1",
"permissions": ["contextMenus"],
"background": {
"persistent": false,
"scripts": [
"/background.js"
]
}
}
Run Code Online (Sandbox Code Playgroud)
现在,既然你有一个非持久性的背景页面,当你需要使用上下文菜单时,你必须使用正确的监听器来"唤醒它".
引自官方文件:
使用事件页面时的最佳做法:
[...]
- 如果您正在使用上下文菜单API,请将字符串id参数传递给
contextMenus.create,并使用contextMenus.onClicked回调而不是onclick参数来contextMenus.create.
所以,简单地说,您的错误是使用onclick参数而不是contextMenus.onClicked.addListener()您的方法background.js.
我已经说过你应该使用这个onClicked事件,但我想补充一点,参考xa的答案:
您应该
contextMenus.create在事件处理程序中注册上下文菜单runtime.onInstalled,因为这些上下文菜单注册仍然存在.
简单地说,一旦创建,上下文菜单一直存在于您的扩展中,最佳做法是只定义它们一次:安装(或更新)扩展时,并在每次加载后台页面时添加监听器.
chrome.runtime.onInstalled.addListener(function() {
chrome.contextMenus.create({
title: 'My menu',
id: 'menu1', // you'll use this in the handler function to identify this context menu item
contexts: ['all'],
});
});
chrome.contextMenus.onClicked.addListener(function(info, tab) {
if (info.menuItemId === "menu1") { // here's where you'll need the ID
// do something
}
});
Run Code Online (Sandbox Code Playgroud)
这就是你需要在活动页面创建上下文菜单,如图所示的文档页面中的chrome.contextMenusAPI.
小智 7
Ammending什么马可白腹中写道:
如果你想使用活动页面或一个非持久性背景页面,正如你所说,你应该通过注册一个上下文菜单contextMenus.create中的事件处理程序runtime.onInstalled,因为这些上下文菜单注册“坚持”呢。
不过,contextMenus.onClicked每次重新加载事件页面时,您都必须为该事件添加侦听器功能,因为您希望监听该事件的注册持续存在,而处理程序回调本身却没有。
因此,要做正确的事,请从注册您的上下文菜单runtime.onInstalled,但是使用contextMenus.onClicked.addListener顶级代码或其他代码来设置事件处理程序回调本身,这样可以确保每次加载事件页面时都执行该回调函数。[ 1 ]
| 归档时间: |
|
| 查看次数: |
2753 次 |
| 最近记录: |