我正在为自己开发一个Google扩展。它在每个页面上右击图像的上下文菜单中添加一个额外的菜单项。
目前,我的扩展没有出现问题,但是当我检查控制台日志时,我会看到以下错误日志:
未定义的TypeError:不能调用未定义的方法“创建”
在代码行上:
var id = chrome.contextMenus.create({
"title": title, "contexts": [context],
"onclick": genericOnClick
});所以问题是,chrome.contextMenus在这里出现了空。我发现它可能与权限有关,但我的manifest.json文件中有contextmenus权限。下面是清单文件中的权限块:
"permissions": [
"contextMenus",
"notifications",
"<all_urls>"
],除此之外,我的扩展应该是正常的。那么为什么我会在日志上看到这个错误呢?如果chrome.contextMenus是空的,我应该简单地添加一个空检查来不做任何事情吗?或者我应该等待初始化它(我不知道如何使用旧风格的-without循环)?
下面是导致此错误的代码块:
var contexts = ["image"];
for (var i = 0; i < contexts.length; i++) {
var context = contexts[i];
var title = "Do something";
var id = chrome.contextMenus.create({
"title": title, "contexts": [context],
"onclick": genericOnClick
});
}
function genericOnClick(info, tab) {
// some stuff
}我对Javascript不太熟悉。我怎样才能解决这个问题?
提前感谢
发布于 2014-03-18 09:38:38
chrome.contextMenus在内容脚本中未定义。
您可以使用Chrome控制台进行检查。
您需要在background.js脚本中创建上下文菜单项:
content.js
var requestData = {"action": "createContextMenuItem"};
//send request to background script
chrome.extension.sendRequest(requestData);background.js:
function onRequest(request, sender, callback){
if(request.action == 'createContextMenuItem'){
var contextItemProperties = {};
contextItemProperties.title = 'context menu item';
chrome.contextMenus.create(contextItemProperties);
}
}
//subscribe on request from content.js:
chrome.extension.onRequest.addListener(onRequest);我很惊讶为什么文档没有提到您只能在后台页面中创建上下文菜单项。
另外,您需要在更改background.js中的代码之后重新加载扩展。
https://stackoverflow.com/questions/21819021
复制相似问题