介绍
我的 Chrome 扩展程序有问题。它应该显示一个小的覆盖弹出窗口(在 jQuery 中创建),其中包含基于您的文本选择的来自谷歌的搜索结果。基本上,您应该能够突出显示任何页面上的文本,右键单击它(上下文菜单),单击“搜索'选定的关键字'”,然后在同一选项卡中弹出一个小窗口作为覆盖所有搜索结果来自谷歌或其他搜索引擎。
问题
现在扩展程序运行得非常好并且没有问题,但是在广泛使用此扩展程序(假设 1 小时)之后,当我将突出显示另一个关键字并搜索它时,扩展程序记住最后一个关键字并显示错误的搜索结果。再说一次,当我突出显示另一个关键字时,它会记住我刚刚突出显示但以前没有得到结果的关键字。这就像一个链接过程,我总是落后一个关键字。
我的想法
我认为这个问题的原因可能是事件监听器,因为当这个问题发生时,我有一个来自 console.log(chrome.extension.onRequest.hasListeners()); 的日志。这说的是真的。这意味着附加了 2 个或更多事件侦听器,它们不应该,因为我正在通过 chrome.extension.onRequest.removeListener(listener1); 删除它们;
也许它发生在实际网页仍在加载并且我正在突出显示关键字,单击上下文菜单和扩展无法加载但不知何故事件监听器触发......我真的无法完全复制这个问题......和是什么导致了这个问题。
清单文件
{
"name": "Search Accelerator",
"version": "1.0",
"manifest_version": 2,
"description": "Search Accelerator extension",
"icons": {
"16": "icon19.png",
"48": "icon48.png",
"128": "icon128.png"
},
"background": {
"scripts": ["content_script.js"]
},
"minimum_chrome_version": "18",
"permissions": [
"contextMenus",
"tabs",
"http://*/*",
"https://*/*",
"management",
"webRequest"
]
}
内容脚本
chrome.contextMenus.create({ "title": '搜索 "%s"',
"contexts":['selection'], "onclick": getClickHandler() });function getClickHandler() { return function(info, tab) {
console.log(chrome.extension.onRequest.hasListeners());chrome.extension.onRequest.addListener(function listener1 (request, sender, sendResponse) { var url = "http://www.google.com/?s=" + info.selectionText; console.log(url); var keywordObj = {keyword: url}; if (request.keywordRequest == "Yes") { console.log(keywordObj); sendResponse(keywordObj); }; chrome.extension.onRequest.removeListener(listener1); } ); chrome.tabs.executeScript(null, { file: "jquery.js" }, function() { chrome.tabs.executeScript(null, { file: "popup.js" }); }); }; };
弹出js
chrome.extension.sendRequest({keywordRequest: "Yes"}, function(response) {
$(document).ready(function() {
if($("#e14_accelerator")) {
$("#e14_accelerator").remove();
}
var rkeyword = response.keyword;
$("body").append("<div id=\"e14_accelerator\" style=\"position: fixed;top: 30px;right: -330px;z-index: 999999; \"><iframe style=\"border:5px solid #c9c9c9;-webkit-box-shadow: 1px 1px 15px 1px rgba(0, 0, 0, 0.2);\" src=\""+ rkeyword +"\" width=\"328\" height=\"240\"></iframe></div>");
$("#e14_accelerator").animate({right:-13},500);
$(document).click(function() {
$("#e14_accelerator").remove();
});
$("#e14_accelerator").click(function() {
return false;
});
});
});
出现此问题时出现的错误消息:
Error during tabs.executeScript: Cannot access contents of url "chrome-devtools://devtools/devtools.html?docked=true&dockSide=bottom&toolbarColor=rgba(230,230,230,1)&textColor=rgba(0,0,0,1)". Extension manifest must request permission to access this host. sendRequest:21
chromeHidden.handleResponse sendRequest:21
Error during tabs.executeScript: Cannot access contents of url "chrome-devtools://devtools/devtools.html?docked=true&dockSide=bottom&toolbarColor=rgba(230,230,230,1)&textColor=rgba(0,0,0,1)". Extension manifest must request permission to access this host. sendRequest:21
chromeHidden.handleResponse