javascript - chrome扩展正确实现两个异步函数
问题描述
希望没事
我在 javascript 中并不完美,我在开发 chrome 扩展时对两个异步函数有疑问。
好 ; 我想在 chrome 扩展中实现功能,即当用户单击按钮时,应该创建一个新选项卡,并且当页面完全加载时,我需要向该页面的内容脚本发送消息。
问题出在chrome扩展的创建选项卡功能中,新创建的选项卡的信息将在回调函数中发送,另一方面我无法将该选项卡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){
});
再次感谢你们。我感谢任何帮助,因为我真的很困惑并阅读了很多文章并尝试了很多方法但没有成功。
解决方案
您可以尝试链接异步回调,例如:
//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;
});
推荐阅读
- jenkins - kubernetes jenkins 奴隶没有看到主人
- python - 您可以访问已被多次询问的单个输入吗
- angular - 无法通过编辑 url (Angular) 导航到页面
- javascript - 检查字符串值是否等于 - (减号)
- deployment - WebIDE 部署错误(ABAP 存储库) - UTM 9 http://www.sophos.com
- python-3.x - Python:聚类搜索关键字
- c# - 在 asp.net core MVC 中显示控制器视图时出错
- python - boto3 describe_fleets api 未获取所有车队信息
- apache-flink - Flink 保存点每次都从头开始重新启动我的一次性源(S3 和 Kinesis)
- python - 计算由字符串的混合值和字符串列表组成的 pandas 数据框列中的唯一值