Chrome扩展名,新创建选项卡的内容脚本的消息仅适用于警报



我正在创建一个从当前选项卡中获取URL的chrome扩展名,并将其放在新打开的选项卡中的字段中。新选项卡中的字段似乎只有在发送消息之前有警报时才会填写。可能是由于异步性,我在Tab创建的回调函数中sendmessage。

这是我的背景:

function sendMessage(msg) {
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
      chrome.tabs.sendMessage(tabs[0].id, msg);
    });
}
chrome.browserAction.onClicked.addListener(function() {
    chrome.tabs.getSelected(null, function(tab) {
        var tabURL = tab.url;
        chrome.tabs.create({url: "https://..<url>.."}, function(tab) {
            alert(''); //<- it only seems to work with this alert in it.
            sendMessage(tabURL);
        });
    });
});

和我的内容:

chrome.runtime.onMessage.addListener(
    function(request, sender) {
        document.getElementById('field').value = request;
});

找到了解决方案,这要归功于亚伯拉罕:

使塔布尔成为全局var:

var tabURL = '';

从chrome.tabs.create中删除回调函数:

chrome.tabs.create({url: "https://..<url>.."});

添加了onuupdated listerer到background.js

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    sendMessage(tabURL);
});

最新更新