我正在编写我的第一个 Chrome 扩展程序,它使用上下文菜单(右键单击并出现选项)。当突出显示文本并从右键单击菜单中选择 ExtensionName 选项时,它会打开一个新选项卡并将其作为查询传递给我的组织拥有的目录。问题是它只工作一次。当文本被突出显示并右键单击时,上下文菜单中的选项仍会出现,但选择 ExtensionName 选项无法生成包含目录结果的另一个选项卡。
我希望用户能够在浏览器会话中根据需要多次使用它,就像大多数其他 Chrome 扩展一样。在 Chrome 扩展程序菜单中重新加载扩展程序可以解决此问题。我认为这与我的后台脚本中发生的事件处理有关rightclick.js
。我对 JavaScript 或 Chrome 上下文中的事件处理不太熟悉,因此我们将不胜感激。
清单.json
{
"name": "ExtensionName",
"description": "Right-click text to search the given directory.",
"manifest_version": 2,
"version": "1.0",
"permissions": ["contextMenus"],
"icons": {
"16": "icon-bitty.png",
"48": "icon-small.png",
"128": "icon-large.png"
},
"background": {
"scripts": ["rightclick.js"]
}
}
右键单击.js
var selection_callbacks = [];
chrome.extension.onMessage.addListener(function (request) {
var callback = selection_callbacks.shift();
callback(request);
});
function getSelection(callback) {
selection_callbacks.push(callback);
chrome.tabs.executeScript(null, { file:"selection.js" });
};
function createDirectoryRequest(selectText) {
var form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", "THE URL FOR THE DIRECTORY GOES HERE");
form.setAttribute("target", "_blank");
var hiddenField = document.createElement("input");
hiddenField.setAttribute("id", "search_generic_search_terms);");
hiddenField.setAttribute("name", "search[generic_search_terms]");
hiddenField.setAttribute("value", selectText);
form.appendChild(hiddenField);
document.body.appendChild(form);
form.submit();
}
chrome.contextMenus.create({title: 'ExtensionName "%s"',
contexts:["selection"],
onclick: function(info, tab){ createDirectoryRequest(info.selectionText); }})
选择.js
chrome.extension.sendResponse(window.getSelection().toString());
我知道这可能不是一个难题,我对此非常陌生,因此将不胜感激。谢谢。