希望很好
im在javascript中并不完美,我在开发chrome扩展程序时遇到两个异步函数的问题。
好吧;我想在Chrome扩展程序中实现功能,即当用户单击按钮时,应该创建一个新标签,并且在页面完全加载后,我需要向该页面的内容脚本发送消息。问题出在chrome扩展的create tab函数中,新创建的tab的信息将在回调函数中发送,另一方面,我无法将该Tab id保存在全局变量中以了解页面何时完全加载有一个侦听器,它将再次侦听选项卡的状态,这些选项卡的信息将在回调中发送,我不知道如何将这两个功能关联在一起,因为我无法将选项卡ID的信息保存在全局变量中。
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
if (info.status === 'complete') {
chrome.tabs.sendMessage(tab.id, msg);
}
});
chrome.tabs.create({ url: someurl , active: false },function(tab){
});
再次谢谢你们。 我非常感谢您的帮助,因为确实让我感到困惑,阅读了很多文章,尝试了很多方法,但没有成功。
答案 0 :(得分:0)
您可以尝试链接异步回调,例如:
//first create the tab
chrome.tabs.create({url: someurl, active:false}, function(tab){
//once the tab is created, inject the content script
chrome.tabs.executeScript(tab.id, {file:'yourContentScript.js'}, function(result){
//as per default, the content script will run AFTER the page has loaded
//once the content script has run and set up the listener, send the message
chrome.tabs.sendMessage(tab.id, {message:'hello, content script'});
});
});
或者您可以使用全局变量,前提是您已为清单中的内容脚本设置了"runAt":"document_idle"
:
var myTabId;
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
if (info.status === 'complete' && tabId == myTabId) {
chrome.tabs.sendMessage(tabId, msg);
}
});
chrome.tabs.create({ url: someurl , active: false },function(tab){
myTabId = tab.id;
});