1

我是试图开发 chrome 扩展的设计师。请不要因为这个问题得到了回答而感到内疚。不是。这是我想要的:

  1. 用户在网络上的任何页面上选择文本
  2. 点击扩展图标
  3. 新标签打开,网址为:“ http://music.yandex.ru/search?text= ” + text_selected_at_step_1

这段代码显然有效

var seltext = "apparat";
chrome.tabs.create({ url: "http://music.yandex.ru/search?text=" + seltext });

我的问题是我不能将选定的文本放入变量中。这不起作用:

function getSelectionText() {
    var text = "";
    if (window.getSelection) {
        text = window.getSelection().toString();
    } else if (document.selection && document.selection.type != "Control") {
        text = document.selection.createRange().text;
    }
    return text;
}

var seltext = getSelectionText();

chrome.tabs.create({ url: "http://music.yandex.ru/search?text=" + seltext });

这也没有,或者我不明白如何用我的链接总结结果

chrome.tabs.executeScript( {
    code: "window.getSelection().toString();"
}, function(selection) {
    document.getElementById("output").innerHTML = selection[0];
});

也不是

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    if (request.method == "getSelection")
      sendResponse({data: window.getSelection().toString()});
    else
      sendResponse({}); // snub them.
});

我只想为选定的文本分配一个变量。这看起来很明显的任务,但事实并非如此。我认识的所有前端开发人员都没有解决方案。

4

1 回答 1

1

这是一个基于所选文本打开新选项卡的最小扩展,使用您列出的第二种方法来检索当前所选文本(在 Chrome 68 中测试):

manifest.json

{
    "manifest_version": 2,
    "version": "1.0",
    "name": "Yandex Searcher",
    "browser_action": {
    },
    "permissions": [
        "activeTab"
    ],
    "background": {
        "scripts": ["main.js"],
        "persistent": false
      }
}

main.js

chrome.browserAction.onClicked.addListener(function() {
    chrome.tabs.executeScript({
        code: "window.getSelection().toString(); "
    }, function(selection) {
        chrome.tabs.create({
            url: "http://music.yandex.ru/search?text=" + selection[0]
        });
    });
});

演示:

这是演示结果的快速屏幕录像

于 2018-08-09T23:09:18.207 回答