我正在使用crossrider开发一个firefox插件,它捕获了url和title。尝试从浏览器捕获标题和网址时,插件工作正常。插件可以从谷歌搜索中捕获URL,但它会捕获以前的标题并显示它。相同的代码在chrome中工作正常。请参考以下代码:
var capture_data = {
title : "not defined",
desc: "not defined",
url : "not defined",
get_info : function(){
this.url = document.location.href;
this.title = document.title;
console.log("Url: "+this.url+" Title:"+this.title)
}
}
window.onhashchange = function(){
console.log(window.location.hash);
capture_data.get_info();
}
请给我一个解决方案
答案 0 :(得分:2)
如果在更新页面标题之前触发onhaschange,您可以尝试使用变异观察器来避免setTimeout。
您将会看到childNode
元素的title
。
所以试试这个:
window.onhashchange = function() {
console.log(window.location.hash);
var title = document.querySelector('title');
var mobs = new window.MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
console.log(mutation.type, mutation);
if (mutation.addedNodes && mutation.addedNodes.length > 0) {
console.log('nodes added');
}
});
});
mobs.observe(title, {
childList: true,
subtree: true
});
}
未经测试但是应该让你走得很远,只需要看console.log
,然后你就可以缩小它以满足你的需求。
答案 1 :(得分:1)
我测试了提供的代码,可以重现您遇到的问题。
在页面标题更新之前调用 onhashchange 事件处理程序似乎很简单。通过在获得标题之前引入一个短暂的延迟来解决问题,如下面的代码所示。
window.onhashchange = function(){
console.log(window.location.hash);
setTimeout(function() {capture_data.get_info();}, 1000);
}
[披露:我是Crossrider员工]