Почему заголовок и значок окна / вкладки не обновляются? - PullRequest
0 голосов
/ 13 июня 2009

Я играю с 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");

Раздражающе, он даже не показывает журналы, так как джетпак и firebug были обновлены за это время: p
Я ожидаю, что этот код заменит заголовок страниц stackoverflow.com на «Foo» - но это всего лишь пример, замените stackoverflow.com чем-то другим, если это может помочь, то есть, вероятно, сайт с меньшим количеством волшебства javascript, чем SO. ком.

Обновление:
Я решил проблему с помощью ответа ниже.
Рабочий пример выглядит так:

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

Ответы [ 2 ]

1 голос
/ 14 июня 2009

может захотеть попробовать

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

0 голосов
/ 07 июля 2009

Если вы вернетесь к Firebug 1.4.0b4, это исправит вашу проблему с консолью.

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

...