Ekstensi Google Chrome + chrome.windows.create + window.getSelection().toString()

Saya sedang mengerjakan ekstensi chrome yang menyalin teks yang dipilih/disorot ke dalam area teks. Inilah yang saya gunakan sejauh ini:

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

Tapi sekarang saya sudah beralih dari popup.html ke jendela yang saya buat seperti ini

latar belakang.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) {
    });
});

Dan saya tidak bisa lagi memasukkan teks yang dipilih ke jendela ini. Saya juga menyalin URL tab aktif saat ini dengan melakukan seperti ini:

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

dan saya bisa membuat ini berfungsi untuk jendela baru menggunakan:

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

Jadi pertanyaan saya adalah: Bagaimana cara memasukkan teks yang dipilih/disorot ke dalam area teks di dalam jendela yang baru saya buat? Apakah ada sesuatu yang serupa dengan

chrome.tabs.query() 

hanya untuk teks yang disorot?


person rekalar    schedule 17.01.2017    source sumber


Jawaban (1)


Gunakan parameter tabId eksekusiScript untuk menyuntikkan ke dalam tab yang diklik, lalu teruskan teks menggunakan salah satu dari berikut ini:

  • perpesanan
  • chrome.storage.local
  • encodeURIComponent di URL: 'window.html?url=' + encodeURIComponent(text)
    lalu di window.js gunakan decodeURIComponent.
  • localStorage, penyimpanan sinkron klasik yang digunakan bersama di antara semua halaman ekstensi internal, jika Anda ingin hasilnya muncul di halaman pertama render tanpa penundaan/berkedip dan tidak ingin meneruskan teks dalam URL.

Berikut ini contoh untuk Penyimpanan lokal.

  • latar belakang.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]);
        });
    }
    
  • jendela.html:

            .................
            <script src="window.js"></script>
        </body>
    </html>
    
  • jendela.js:

    document.getElementById('url').textContent = localStorage.selectedText || '';
    delete localStorage.selectedText;
    
person wOxxOm    schedule 17.01.2017
comment
Terima kasih! Inilah yang saya butuhkan. - person rekalar; 18.01.2017