0

我创建了一个 Chrome 扩展程序,它添加了一个上下文菜单项来搜索 4 个商店以查找页面上的选定文本。从这个意义上说,扩展工作正常,但是用户也要求我实现键盘快捷方式。到目前为止,我有一个捷径,但我没有运气捕捉到选定的文本以进行搜索。任何人都可以在这里提供帮助吗?

清单.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"
        }
    } 
}

背景.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(这是我用它编写的第一件事)发现很难尝试调整这些示例以满足我的需要。

非常感谢任何输入,谢谢。

4

1 回答 1

3

是的,您需要在当前选项卡中运行代码才能获得选择,但在这种情况下并不难:

chrome.commands.onCommand.addListener(function(command) {
  if(command === "search") {
    chrome.tabs.executeScript( {
      code: "window.getSelection().toString();"
    }, function(selection) {
      Search({selectionText: selection[0]});
    });
  }
});

chrome.tabs.executeScript如果不指定 tabId 参数,将在当前窗口的活动选项卡的上下文中执行代码,并将使用该代码中评估的最后一个表达式调用您的回调函数(实际上回调函数接收一个值数组,因为您可以将 executeScript 设置为在多个选项卡中运行代码)。

附带说明一下,javascript 中的常见做法是使用小写作为函数名称的第一个字母,因此您可能需要重命名Searchsearch.

于 2013-09-30T17:17:38.917 回答