无法从firefox插件捕获谷歌搜索标题

时间:2014-08-21 11:36:48

标签: javascript firefox firefox-addon crossrider

我正在使用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();

 }       

请给我一个解决方案

2 个答案:

答案 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员工]