Новая вкладка с URL + выделенный текст (js, расширение Chrome)

Я дизайнер, который пытается разработать расширение для Chrome. Пожалуйста, не вини меня в том, что на этот вопрос был дан ответ. Это не так. Вот что я хочу:

  1. Пользователь выбирает текст на любой странице в Интернете
  2. Значок расширения Clicks
  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.
});

Я просто хочу присвоить переменную выделенному тексту. Казалось бы, такая очевидная задача, но это не так. У всех фронтенд-разработчиков, которых я знаю, пока нет решения.


person Aleksandr Sood'in    schedule 09.08.2018    source источник


Ответы (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]
        });
    });
});

Демонстрация:

Вот краткая запись экрана, демонстрирующая результат.

person Ollin Boer Bohan    schedule 09.08.2018
comment
почему вы удалили свой ответ здесь: stackoverflow.com/questions/51776967/. Это правильный и действительный - person Temani Afif; 10.08.2018
comment
да, но вы предоставили другой метод ... мой ответ удалил перевод, но ваш добавил вращение с переводом;) так что это другой способ сделать - person Temani Afif; 10.08.2018