0

我正在使用jetpack来更改某些页面的标题(最好是网站图标)。

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");

令人恼火的是,它甚至不再显示日志,因为同时更新了 jetpack 和 firebug:p
我希望这段代码用“Foo”替换 stackoverflow.com 页面的标题 - 但这只是一个示例,替换stackoverflow.com 与其他任何可能有帮助的东西,即可能是一个比 SO.com 少 javascript 魔法的网站。

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

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");
4

2 回答 2

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

于 2009-06-14T19:40:31.347 回答
0

如果您退回到 firebug 1.4.0b4,它将解决您遇到的控制台问题。

http://groups.google.com/group/mozilla-labs-jetpack/browse_thread/thread/c0cba73c67f19530#

于 2009-07-06T21:22:36.157 回答