0

特定のページのタイトル (理想的にはファビコン) を変更するためにジェットパックをいじっています。

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
このコードは、stackoverflow.com ページのタイトルを「Foo」に置き換えることを期待していますが、これは単なる例です。置き換えてください。たとえば、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 に答える