我在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
}
});
}
}
);