Chrome Bug - onDOMContentLoaded在加载任何DOM之前触发

时间:2014-07-02 14:04:23

标签: javascript google-chrome google-chrome-extension

我在background.js文件中设置了一个事件监听器:

chrome.webNavigation.onDOMContentLoaded.addListener(function (info) {
    // Checks for the URL bar navigation and not any child frames
    if (info.frameId === 0){
        var url = info.url;
        console.log('visit: ' + url);
    }
});

我希望在dom加载时显示当前页面的url的日志条目。在多功能框中输入搜索时出现问题。假设我经常访问www.twitter.com,当我在多功能框中输入以“t”开头的搜索时,它会被缓存。

如果我在多功能框中输入搜索词“testing123”,我会看到一个日志条目“visit:http://www.twitter.com/”。如果我输入搜索词“callbacks”,同样的事情会发生:我会看到一个日志条目说“visit:http://www.cnn.com”这些在我点击搜索输入之前就会被记录。我假设这是因为Chrome正在对常用的URL进行某种预取,但我仍然认为这是出乎意料的行为。

有人可以确认吗?感谢。

修改 我尝试了一些其他的webNavigation方法,但我仍然看到一些不一致的地方:

onComitted - 几乎所有时间都被解雇了。
onHistoryStateUpdated - 在某些时候被解雇了 onTabReplaced - 由于没有进行预渲染,因此没有开火。

编辑2: 以下代码帮助我整理了在非活动选项卡上触发的事件。 (有关更多解释,请参阅第5/6号评论。)

chrome.webNavigation.onCommitted.addListener(
    function (info) {

        // Checks for the URL bar navigation and not any child frames
        if (info.frameId === 0){

            chrome.tabs.query({active: true, currentWindow: true}, function (tab) {
                // Ensures that the listener is only attached to the active tab
                if (tab[0].id === info.tabId){
                    // Everything's good! Do your work here
                }
            });
        }
    }
);

0 个答案:

没有答案