2009-06-13 89 views
0

我正在玩jetpack来改变某些页面的标题(最好是favicon)。为什么窗口/标签的标题和图标不更新?

Firebug显示页面的HTML已被正确更改,但Firefox不会更新窗口和/或标签的标题。

这一定是可能的,不知何故,因为Twitter搜索正是这样做的。随着更多搜索结果出现,它正在更新标题,不是吗?

我想我只是想念一些东西......任何想法?

function replaceTitle(doc) 
{ 
    if (doc.location.protocol == "http:" || doc.location.protocol == "https:") 
    { 

     var host=doc.location.host; 
     if(host.indexOf("stackoverflow.com")>=0) 
     { 
      var title=doc.getElementsByTagName("title") 
      console.log(title); 

      if(title) 
      { 
       var val=title[0]; 
       if(val) 
       { 
        console.log("val", val); 
        console.log("valx", val.textContent); 
        val.textContent="Foo"; 
        console.log("valz", val.textContent); 
       } 
      } 
     } 
    }  
} 


var state = "on"; 

function toggleState() 
{ 
    if(state == "off") 
    { 
     jetpack.tabs.onReady(replaceTitle); 
     state = "on"; 
    } 
    else 
    { 
     jetpack.tabs.onReady.unbind(replaceTitle); 
     state = "off"; 
    } 
    console.log(state); 
    // This is a temporary way of keeping all browser window states 
    // in sync. We are working on a better API for this. 
    /* 
    widgets.forEach(function(widget) { 
    widget.defaultView.wrappedJSObject.setState(state); 
    }); 
    */ 
} 

jetpack.statusBar.append(
    { 
     html: "Boo", 
     onReady: function(widget) 
       { 
        console.log("ready"); 
        // This is a temporary way of keeping all browser window states 
        // in sync. We are working on a better API for this. 
        /* 
        widgets.push(widget); 
        widget.defaultView.wrappedJSObject.setState(state); 
        */ 
        $(widget).click(toggleState); 
       }, 
     onUnload: function(widget) 
       { 
        console.log("unload"); 
        /* 
        widgets.splice(widgets.indexOf(widget), 1); 
        */ 
       }, 
     width: 42 
    }); 

console.log("Test"); 

不快,它甚至不显示日志了,因为喷气背包和萤火已经在此期间被更新::P
我期望此代码如评论所说

示例代码用“Foo”替换stackoverflow.com页面的标题 - 但这只是一个例子,如果可能有所帮助,用其他任何东西替换stackoverflow.com,也许这是一个JavaScript比SO.com更少的网站。

更新:
我在下面的答案帮助下解决了这个问题。
工作示例如下:

function replaceTitle() 
{ 
    var doc=this.contentDocument; 
    console.log("replaceTitle "+ doc); 
    if(doc) 
    { 
    var location = doc.location; 

    if ((location.protocol == "http:" || location.protocol == "https:") 
     && location.host.indexOf("stackoverflow.com") !== -1) 
    { 
     doc.title = "Foo"; 
     console.log("Title set to "+doc.title); 
    }  
    else 
    { 
     console.log("Location "+location); 
    } 
    } 
} 


var state = "on"; 

function toggleState() 
{ 
    if(state == "off") 
    { 
    state = "on"; 
    jetpack.tabs.onReady(replaceTitle); 
    } 
    else 
    { 
    state = "off"; 
    jetpack.tabs.onReady.unbind(replaceTitle); 
    } 
    console.log(state); 
} 

jetpack.statusBar.append(
{ 
    html: "Boo", 
    onReady: function(widget) 
    { 
     console.log("ready: "+state); 
     $(widget).click(toggleState); 
    }, 
    onUnload: function(widget) 
    { 
     console.log("unload"); 
    }, 
    width: 42 
}); 

console.log("Testing"); 
+0

也许是一些示例代码。 – 2009-06-13 13:28:45

回答

1

可能想尝试

function replaceTitle(doc) 
{ 
    var location = doc.location; 

    if ((location.protocol == "http:" || location.protocol == "https:") 
     && location.host.indexOf("stackoverflow.com") !== -1) { 
    document.title = "Foo"; 
    }  
} 

作品对我来说

http://pastebin.me/4a3550e0dbe19?framepage

+1

stackoverflow.comanywebsitenamestartingwithcom.com会工作 - 小细节 – 2009-06-14 19:44:03