Google Chrome扩展+ Chrome.windows.create + window.getSelection().toString()

iqih9akk  于 2023-10-14  发布在  Go
关注(0)|答案(1)|浏览(132)

我正在开发一个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) {
    });
});

我无法将选定的文本显示到这个窗口中。我还复制了activetab的当前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()

就为了高亮显示的文字

xzabzqsa

xzabzqsa1#

使用executeScript的tabId参数注入单击的选项卡,然后使用以下任意方法传递文本:

然后在window.js中使用decodeURIComponent。

  • localStorage,所有内部扩展页面之间共享的经典同步存储,以防您需要结果出现在第一个页面渲染中而没有延迟/ Flink ,并且不想传递URL中的文本。

这里有一个localStorage的例子。

  • background.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]);
    });
}
  • window.html:
.................
        <script src="window.js"></script>
    </body>
</html>
  • window.js:
document.getElementById('url').textContent = localStorage.selectedText || '';
delete localStorage.selectedText;

相关问题