![](/img/trans.png)
[英]Cannot create notification in Chrome Extension. Receive Uncaught TypeError: Cannot read property 'create' of undefined error
[英]Uncaught TypeError: Cannot read property 'create' of undefined in chrome extension
我正在尝试开发chrome扩展程序,在该扩展程序中,当用户选择文本时,将抓住所选的文本,然后将其发送到后台脚本以处理api调用。 现在,文本已被抓取,但我已在以下行中进行了控制台
background.js
chrome.extension.onMessage.addListener(function(request, sender, sendResponse){
console.log('req', request.message)
但这不是可控的,可能是由于甚至没有调用此块。
这是代码
manifest.json
{
"manifest_version": 2,
"name": "DEMO",
"description": "This extension allow the user to select the text and redirect to the google to search that text",
"version": "1.0",
"browser_action": {
"default_icon": "Logo.png",
"default_popup": "html/popup.html",
"default_title": "click me"
},
"permissions": [
"activeTab",
"storage"
],
"options_page": "html/popup.html",
"background": {
"scripts": ["js/eventPage.js", "js/background.js"],
"persistent": false
},
"content_scripts": [
{
"matches" : [
"http://*/*", "https://*/*"
],
"js" : [
"js/content.js"
]
}
],
"commands": {
"toggle-feature-foo": {
"suggested_key": {
"default": "Ctrl+Shift+Y",
"mac": "Command+Shift+H"
},
"description": "Toggle feature foo"
}
}
}
content.js
function init(event) {
var topic = "";
if (window.getSelection) {
topic = window.getSelection().toString();
} else if (document.selection) {
topic = document.selection.createRange().topic;
} else {
return topic;
}
if((event.ctrlKey && event.keyCode === 65) && topic.length) {
chrome.extension.sendMessage({'message': 'setTopic', 'data': topic}, function(response){
console.log('response', response);
})
}
}
document.addEventListener('keydown',init);
background.js
var selectedTopic = null;
chrome.extension.onMessage.addListener(function(request, sender, sendResponse){
console.log('req', request.message) // not listened
switch(request.message) {
case 'setTopic':
window.selectedTopic = request.data;
break;
default:
sendResponse({data: 'Invalid'})
break;
}
})
function savetopic(info, tab) {
var httpRequest = new XMLHttpRequest();
httpRequest.open('get', 'http://www.google.com/?q='+selectedTopic)
httpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
httpRequest.onreadystatechange = function() {
if(httpRequest.readyState==4) {
alert(httpRequest.responseText);
}
}
}
var contexts = ["selection"];
for (var i = 0; i < contexts.length; i++)
{
var context = contexts[i];
chrome.contextMenus.create({"title": "Send to Google", "contexts":[context], "onclick": savetopic});
}
这是我的chrome扩展程序的完整代码。 我是否错过了background.js中的某些内容? 我什至在manifest.json中
"background": {
"scripts": ["js/eventPage.js", "js/background.js"],
"persistent": false
},
为什么它不起作用? 我从扩展设置的检查视图中检查了后台,它在控制台中显示了以下错误
未捕获的TypeError:无法读取未定义的属性“创建”
对于消息传递部分,您的问题应该是您使用的是chrome.extension.onMessage和chrome.extension.sendMessage。
对于Chrome中的消息传递,您可以执行以下操作:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
console.log('req', request.message) // not listened
switch(request.message) {
case 'setTopic':
window.selectedTopic = request.data;
break;
default:
sendResponse({data: 'Invalid'})
break;
}
});
和
chrome.runtime.sendMessage({'message': 'setTopic', 'data': topic}, function(response){
console.log('response', response);
});
您可以在这里阅读有关此内容的更多信息: https : //developer.chrome.com/apps/messaging
另外,对于正在使用的chrome命令api,您希望像这样在后台处理命令:
chrome.commands.onCommand.addListener(function(command) {
console.log('Command:', command);
});
而不是到处都是消息传递的麻烦。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.