Расширение Google Chrome + chrome.windows.create + window.getSelection().toString()

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

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

Но теперь я переключился с popup.html на окно, которое я создал следующим образом.

background.js:

chrome.browserAction.onClicked.addListener(function(tab) {
    chrome.windows.create({
        url: chrome.runtime.getURL("window.html"),
        type: "panel", height: 590, width:850, focused: false
        }, function(win) {
    });
});

И я больше не могу получить выделенный текст в этом окне. Я также скопировал текущий URL активной вкладки, выполнив следующие действия:

chrome.tabs.getSelected(windowId, function(tab) {
    document.getElementById('url').innerHTML = tab.url;
    var windowId = tab.id
});

и я мог бы сделать это для нового окна, используя:

chrome.tabs.query({'active': true, 'lastFocusedWindow': true}, function (tabs) {
    document.getElementById('url').innerHTML = tabs[0].url;
});

Итак, мой вопрос: Как я могу получить выделенный/выделенный текст в текстовую область внутри моего только что созданного окна? Есть ли что-то похожее на

chrome.tabs.query() 

только для выделенного текста?


person rekalar    schedule 17.01.2017    source источник


Ответы (1)


Используйте параметр tabId в executeScript для вставки на выбранную вкладку, а затем передайте текст, используя любой из них:

  • обмен сообщениями
  • chrome.storage.local
  • encodeURIComponent в URL: 'window.html?url=' + encodeURIComponent(text)
    затем в window.js используйте decodeURIComponent.
  • localStorage, классическое синхронное хранилище, совместно используемое всеми внутренними страницами расширения, на случай, если вам нужно, чтобы результат отображался на первой странице без задержки/мерцания и вы не хотите передавать текст в URL.

Вот пример для localStorage.

  • фон.js:

    chrome.browserAction.onClicked.addListener(function(tab) {
        getSelectedText(tab.id, function(text) {
            localStorage.selectedText = text;
            chrome.windows.create({
                url: "/window.html",
                type: "panel", height: 590, width:850, focused: false
            });
        });
    });
    
    function getSelectedText(tabId, cb) {
        chrome.tabs.executeScript(tabId, {
            code: "window.getSelection().toString();",
        }, function(selection) {
            cb(selection[0]);
        });
    }
    
  • окно.html:

            .................
            <script src="window.js"></script>
        </body>
    </html>
    
  • окно.js:

    document.getElementById('url').textContent = localStorage.selectedText || '';
    delete localStorage.selectedText;
    
person wOxxOm    schedule 17.01.2017
comment
Благодарю вас! Это было именно то, что мне было нужно. - person rekalar; 18.01.2017