Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google chrome extension 等待chrome.tabs.update选项卡完成加载_Google Chrome Extension - Fatal编程技术网

Google chrome extension 等待chrome.tabs.update选项卡完成加载

Google chrome extension 等待chrome.tabs.update选项卡完成加载,google-chrome-extension,Google Chrome Extension,我正在尝试使用一个chrome扩展,并试图通过依赖sendMessage来清理我的一些代码。但是,回调函数在页面完成加载之前激活,因此在新选项卡的情况下,没有人接收,而在现有选项卡的情况下,正在从中移动的页面正在获取消息(但这不是我想要的)。我找过其他人问新标签的问题,但没有明确的答案,我看到的最好的建议是创建一个全局变量,为标签加载创建一个侦听器,并将其与这个全局变量进行比较 所以问题是,有没有一种方法可以在回调函数中等待页面加载,或者创建一个JS对象数组,其中包含我正在等待的选项卡以及我想要

我正在尝试使用一个chrome扩展,并试图通过依赖sendMessage来清理我的一些代码。但是,回调函数在页面完成加载之前激活,因此在新选项卡的情况下,没有人接收,而在现有选项卡的情况下,正在从中移动的页面正在获取消息(但这不是我想要的)。我找过其他人问新标签的问题,但没有明确的答案,我看到的最好的建议是创建一个全局变量,为标签加载创建一个侦听器,并将其与这个全局变量进行比较

所以问题是,有没有一种方法可以在回调函数中等待页面加载,或者创建一个JS对象数组,其中包含我正在等待的选项卡以及我想要发送到该选项卡的信息

这里是背景javascript文件中的相关代码,仅供参考

   chrome.tabs.sendMessage(tab.id, {info: "info"}, function(response)  
   {
     //This line isn't used when I am navigating without changing tabs
     chrome.tabs.create({url: response.info.linkUrl}, function(tab1)
     {
       chrome.tabs.update(tab1.id, {url: response.info.linkUrl}, function(tab2)
       {
         chrome.tabs.sendMessage(tab2.id, {info: "More Info"});
       });
     });
   });

否则,一旦我的sendMessage被延迟到足以让我亲眼看到,我就能够确认我的所有选项卡端代码都有效。通过检查document.url,我的代码能够始终通过被导航页面上的验证。

您可以尝试注入第二个内容脚本,而不是消息。 它将在与其他脚本相同的上下文中执行

类似于

chrome.tabs.executeScript(tab2.id, 
  {code: 'showInfo("More Info);', runAt: 'document_idle'}
);
其中
showInfo
与消息处理程序的作用相同

这有点像黑客,我不能100%确定加载顺序是否正确

其他可能的解决方案更为复杂

例如,您可以让内容脚本报告它已准备就绪,并为此提供一个处理程序,例如,您可以在后台为
onMessage
注册一个侦听器,该侦听器等待来自该特定tab.id的消息,发送“更多信息”,然后重试


或者,您可以切换到内容脚本的编程注入,这将允许您控制加载顺序。

奇怪的是,executeScript在新页面而不是旧页面上运行,它对新选项卡和当前选项卡都有效。谢谢