Chrome扩展程序:从webNavigation事件中识别“实际”标签

时间:2013-10-04 09:50:24

标签: google-chrome-extension

我正在尝试确定我收到“webNavigation.onCompleted”的标签是否为“实际”标签。

如文档中所述: http://developer.chrome.com/extensions/webNavigation.html

文档的简短引用:

有关标签ID的说明: 并非所有导航标签都与Chrome用户界面中的实际标签相对应,例如,正在预呈现的标签。此类标签不能通过标签API访问,也不能通过webNavigation.getFrame或webNavigation.getAllFrames请求有关它们的信息。一旦交换了这样的选项卡,就会触发onTabReplaced事件,并且可以通过这些API访问它们。

所以现在当我收到一个事件时,我在试图找出标签是否为“实际”时会遇到2个问题:

  1. 文档中描述的场景,但是我看到onTabReplaced可以在onCompleted之前/之后调用, 甚至没有调用,即使我希望它被调用,因为我在tabs.onCreate中创建的选项卡列表中没有选项卡ID, 然后页面显示在选项卡中。

  2. 在Google Chrome页面中预渲染的页面(例如google for“ford”),最终不会显示在标签页上。

  3. 如果您不熟悉预渲染: https://support.google.com/chrome/answer/1385029?hl=en

    我认为这些情况有所不同,因为我看到预渲染页面的差异, 你最终会成为那些被淘汰的人,以及那些最终没有被使用的人。 一页最终“导航到”,而另一页则“缓存”。

    但是,就我所能找到的那样,使用webNavigation api无法检测到这种差异。

    所以我的问题 - 是否有任何方法可以区分(希望使用webNaviagtion api), 在“实际”选项卡之间,预渲染页面将显示为选项卡, 和预先渲染的页面将保留在缓存中(现在)?

    只有2个澄清,关于我认为可以使用的解决方案,但他们看起来对我“不好”, 至少在现阶段。

    1. 文档说“无法通过标签API访问此类标签”。 所以从技术上讲,我可以尝试使用这个API,获得一个例外,这样就可以找出它的“预渲染”标签, 但我不喜欢我的代码使用异常,所以我正在寻找一种“干净”的方式。

    2. webNavigation.onComplete中的
    3. ,我可以设置超时1秒, 然后如果在这一秒,onTabReplaced,我可以弄清楚这个标签是 转为“实际”标签。而不是留在“缓存”。 但是在这1秒或者我选择的任何持续时间内,可能会有很多其他事件, 甚至标签都可以关闭。 所以,我正在寻找一个“干净”的解决方案。

    4. 感谢您的帮助。

0 个答案:

没有答案