我创建了一个Chrome扩展程序,它添加了一个上下文菜单项,用于搜索页面上所选文本的4个商店。在这个意义上,扩展工作正常,但是用户也要求我实现键盘快捷方式。到目前为止,我有一个捷径工作,但我没有运气捕获选定的文本,以便进行搜索。有人能帮到这里吗?
的manifest.json
{
"name": "Context Shop Search",
"description": "Searches shops for selected text using the context menu",
"version": "0.6",
"manifest_version": 2,
"permissions": ["contextMenus", "tabs"],
"background": {
"scripts": ["jquery.js", "background.js"]
},
"commands": {
"search": {
"suggested_key": {
"default": "Ctrl+Shift+S"
},
"description": "Search Stores"
}
}
}
Background.js
var urls = ["http://groceries.asda.com/asda-webstore/landing/home.shtml?cmpid=ahc-_-ghs-asdacom-dsk-_-hp-_-sub_title#/search/", "http://www.waitrose.com/shop/HeaderSearchCmd?defaultSearch=GR&searchTerm=&search=Search", "http://www.ocado.com/webshop/getSearchProducts.do?clearTabs=yes&isFreshSearch=true&entry=", "http://www.tesco.com/groceries/Product/Search/Default.aspx?searchBox=&newSort=true&search.x=-1042&search.y=-63&search=Search"];
var searchUrls = [];
function Search(info) {
//alert(info.selectionText);
var selection = info.selectionText;
searchUrls[0] = urls[0].concat(selection);
searchUrls[1] = urls[1].replace("searchTerm=", "searchTerm=".concat(selection));
searchUrls[2] = urls[2].concat(selection);
searchUrls[3] = urls[3].replace("searchBox=", "searchBox=".concat(selection));
chrome.windows.create({
url: searchUrls,
height: 768,
width: 1024
});
}
chrome.commands.onCommand.addListener(function (command) {
alert("sometext");
});
chrome.contextMenus.create({
id: "ctxtSearch",
title: "Search '%s' in all stores",
contexts: ["selection"],
onclick: Search
})
一直在搜索众多网站并发现答案的许多变体'使用内容脚本',但大多数示例使用各种浏览器操作或点击事件,显然,我不想使用,并且相当新的javascript(这是我用它写的第一件事)发现很难尝试调整这些例子以满足我的需要。
非常感谢任何输入,谢谢。
答案 0 :(得分:3)
是的,您需要在当前标签中运行代码才能获得选择,但在这种情况下并不困难:
chrome.commands.onCommand.addListener(function(command) {
if(command === "search") {
chrome.tabs.executeScript( {
code: "window.getSelection().toString();"
}, function(selection) {
Search({selectionText: selection[0]});
});
}
});
没有指定tabId参数的 chrome.tabs.executeScript
将在当前窗口的活动选项卡的上下文中执行代码,并将使用该代码中评估的最后一个表达式调用您的回调函数(实际上回调函数接收一个数组值因为您可以使executeScript在多个选项卡中运行代码。)
另一方面,javascript中常见的做法是使用小写字母作为函数名的第一个字母,因此您可能希望将Search
重命名为search
。