使用键盘快捷键捕获所选文本

时间:2013-09-30 15:50:16

标签: javascript google-chrome-extension

我创建了一个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(这是我用它写的第一件事)发现很难尝试调整这些例子以满足我的需要。

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

1 个答案:

答案 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