与侦听器不一致 - 一台计算机上的 onUpdated 和另一台计算机上的 onReplaced

Seg*_*gev 5 google-chrome google-chrome-extension

我正在我的 eventPage.js 中使用下一个代码(由谷歌替换的backgroundPage),并且我面临着一些奇怪的不一致。这是场景:

第一台机器

打开新标签->

onActivated 
onUpdated  
onUpdated  
onUpdated
Run Code Online (Sandbox Code Playgroud)

输入网址->

onUpdated
onUpdated 
Run Code Online (Sandbox Code Playgroud)

输入另一个网址 ->

onUpdated
onUpdated 
Run Code Online (Sandbox Code Playgroud)

第二台机器

打开新标签->

onActivated
Run Code Online (Sandbox Code Playgroud)

输入网址

onReplaced
onActivated
Run Code Online (Sandbox Code Playgroud)

输入另一个网址

onReplaced 
onActivated
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab)
{   
    console.log("onUpdated");
       });

chrome.tabs.onActivated.addListener(function(tabId, changeInfo, tab)
{
    console.log("onActivated");
   });

 chrome.tabs.onReplaced.addListener(function(tabId, changeInfo, tab)
 {
    console.log("onReplaced");
   });
Run Code Online (Sandbox Code Playgroud)

经过大量调试后,我发现造成这种差异的原因是 Google Chrome 设置中的“预测网络操作以提高页面加载性能”选项。

在第一台机器中,未选择上述选项,并且按预期工作。

这是第二台机器的预期行为吗?

从文档中我可以以某种方式理解 onReplaced 状态:

当一个选项卡由于预渲染或即时而被另一个选项卡替换时触发。

尽管记录非常少,并且无法知道该选项在某种程度上与 onUpdated onReplaced 状态相关,但我真的不明白第二台机器中的 onActivated 状态以及为什么第一台机器和第二台机器之间存在差异。

我在网上找不到有关此行为的任何文档。在 stackoverflow 上,我几乎找不到一个提到 onReplaced 侦听器的问题,但没有任何我可以使用的信息。

谢谢

gka*_*pak 4

具有“预测网络操作...”选项后,Chrome 会尝试预测您的下一个操作(即您接下来可能请求什么资源或页面)并将其加载到后台(在您发出请求之前)。一旦您实际请求该资源或页面,Chrome 就不必先加载它,然后再为您提供服务;相反,它只为预加载的实例提供服务。这可以提高性能(只要对下一步操作的预测准确)。

\n

为了提供预加载的页面,Chrome 会将当前选项卡(即触发时onReplaced)替换为已在后台加载页面的选项卡(替换选项卡变为活动状态,从而触发事件onActivated)。因为替换选项卡中已经预先加载了内容,所以没有onUpdated事件。

\n
\n

来自 Chrome预渲染白皮书

\n
\n

预渲染扩展了预取的概念。它不只是下载顶级资源,而是执行向用户显示页面所需的所有工作\xe2\x80\x94,而不是在用户单击之前实际显示它。预渲染的行为类似于用户在页面上的链接上单击鼠标中键(在后台选项卡中打开它),然后切换到该选项卡。但是,在预渲染中,\xe2\x80\x9cbackground 选项卡\xe2\x80\x9d 对用户完全隐藏,当用户单击时,其内容会无缝交换到用户正在查看的同一选项卡中。从用户\xe2\x80\x99s 的角度来看,页面加载速度比以前快得多。

\n

Web 开发人员可以按如下所述触发预渲染。从 Chrome 17 开始,Chrome 本身将在某些情况下根据用户与地址栏的交互启动预渲染。

\n
\n