我正在使用eventPage.js中的下一个代码(google替换backgroundPage),我面临一些奇怪的不一致。 这是场景:
第一台机器:
打开新标签页>
onActivated
onUpdated
onUpdated
onUpdated
输入网址 - >
onUpdated
onUpdated
输入其他网址 - >
onUpdated
onUpdated
第二台机器:
打开新标签页>
onActivated
输入网址
onReplaced
onActivated
输入其他网址
onReplaced
onActivated
这是我的代码:
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");
});
经过大量调试后,我发现造成这种差异的原因是Google Chrome设置中的“预测网络操作以提高网页加载效果”选项。
在第一台机器中,未选择上面的选项并且按预期工作。
第二台机器的预期行为是什么?
从文档中我可以理解onReplaced状态:
由于预渲染或使用另一个标签替换标签时触发 瞬间。
虽然文档记录很差,并且无法知道该选项与onUpdated onReplaced状态有某种关联但我真的不理解第二台机器中的onActivated状态以及为什么第一台机器和第一台机器之间存在差异第二台机器。
我在网上找不到有关此行为的任何文档。在stackoverflow上,我几乎找不到一个提到onReplaced listener的问题,但没有任何我可以使用的信息。
由于
答案 0 :(得分:4)
选中“预测网络操作...”选项后,Chrome会尝试预测您的下一个操作(即您下次可能请求的资源或页面)并将其加载到背景(在您提出请求之前)。只要您确实请求该资源或页面,Chrome就不必先加载它然后再将其提供给您;相反,它只是为预先加载的实例提供服务。这样可以提高性能(只要您对下一步操作的预测准确无误)。
要投放预先加载的页面,Chrome会使用已在后台加载页面的标签替换当前标签(触发onReplaced
时)(替换标签变为活动状态,因此{ {1}}事件)。由于事先已在替换标签中加载了内容,因此没有onActivated
事件。
来自Chrome的 whitepaper on prerender :
Prerendering 扩展了预取的概念。它不是仅下载顶级资源,而是完成向用户显示页面所需的所有工作,而不会在用户点击之前实际显示该页面。预渲染的行为类似于用户在页面上的中间点击(在后台选项卡中打开它)然后切换到该选项卡。但是,在预渲染中,“背景选项卡”对用户完全隐藏,当用户点击时,其内容将无缝交换到用户正在查看的同一选项卡中。从用户的角度来看,页面加载速度比以前快得多。
Web开发人员可以触发预渲染,如下所述。从Chrome 17开始,Chrome本身将根据用户与地址栏的互动在某些情况下启动预呈现。