我正在尝试确定我收到“webNavigation.onCompleted”的选项卡是否是“实际”选项卡。
如文档中所述:http: //developer.chrome.com/extensions/webNavigation.html
来自文档的简短引用:
关于选项卡 ID 的说明:并非所有导航选项卡都对应于 Chrome 用户界面中的实际选项卡,例如,正在预渲染的选项卡。此类选项卡无法通过选项卡 API 访问,您也不能通过 webNavigation.getFrame 或 webNavigation.getAllFrames 请求有关它们的信息。一旦交换了这样的选项卡,就会触发 onTabReplaced 事件,并且可以通过这些 API 访问它们。
因此,现在当我收到一个事件时,在尝试确定选项卡是否为“实际”时遇到了 2 个问题:
文档中描述的场景,但是我看到 onTabReplaced 可以在 onCompleted 之前/之后调用,甚至不调用,即使我希望调用它,因为我在 tabs.onCreate 中创建的选项卡列表中没有选项卡 ID ,然后页面显示在选项卡中。
在 Google chrome 页面中预渲染的页面(例如 google 中的“ford”),最终不会显示在选项卡上。
如果您不熟悉预渲染: https ://support.google.com/chrome/answer/1385029?hl=en
我认为这些情况是不同的,因为我看到预渲染页面的差异,最终你是 tads,而那些最终没有被使用。一页最终“导航到”,而另一页只是“缓存”。
但是据我所知,使用webNavigation api无法检测到这种差异。
所以我的问题 - 有什么方法可以区分(希望使用 webNaviagtion api)“实际”选项卡、将显示为选项卡的预渲染页面和将保留的预渲染页面缓存(现在)?
只是 2 澄清,关于据称我可以使用的解决方案,但它们在我看来“不好”,至少在这个阶段。
文档说“此类选项卡无法通过选项卡 API 访问”。所以从技术上讲,我可以尝试使用这个 API,得到一个异常,然后通过这种方式找出它的“预渲染”选项卡,但我不喜欢我的代码为此使用异常,所以我正在寻找一种“干净”的方式.
在 webNavigation.onComplete 中,我可以将超时设置为 1 秒,然后如果在这一秒内,onTabReplaced,我可以确定此选项卡已移动为“实际”选项卡。而不是留在“缓存”中。但是在这 1 秒内,或者我选择的任何时间段内,可以有很多其他的事件,甚至可以关闭选项卡。再次,我正在寻找一个“干净”的解决方案。
谢谢你的帮助。