我正在创建一个从当前选项卡中获取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);
});