Xpoint
   [напомнить пароль]

Отлов открытия вкладки

2006-09-20 18:35:42 [обр] Денис Ибаев aka Dionys [досье]
Как поймать момент открытия новой вкладки (в том числе и первой) в браузере?
спустя 4 дня [обр] Денис Ибаев aka Dionys [досье]

Получилось вот такое:

const windowDataSource = Components.classes['@mozilla.org/rdf/datasource;1?name=window-mediator'].getService(Components.interfaces.nsIWindowDataSource);


function check(aEvent)
{
    var document = aEvent.target.wrappedJSObject;
    var index = 0;

    while (true)
    {
        var window = windowDataSource.getWindowForResource("window-" + index);

        if (window && ("getBrowser" in window))
        {
            var tabs = window.getBrowser().browsers;

            for (var i = tabs.length; --i > -1;)
                if (tabs[i].contentDocument && document == tabs[i].contentDocument && !("_checked" in tabs[i]))
                {
                    // Поймали открытие очередной вкладки. Помечаем её и делаем своё дело.
                    tabs[i]._checked = true;
                    return;
                }
        }
        index++;
    }
}

function init()
{
    var browser = getBrowser();
    var tabs = browser.browsers;

    if (tabs.length == 1 && tabs[0].contentWindow.location == "about:blank")
    {
        // Поймали открытие первой вкладки. Помечаем её и делаем своё дело.
        tabs[0]._checked = true;
    }
    browser.addEventListener("DOMContentLoaded", check, false);
}

window.addEventListener("load", init, false);

Пока вроде работает верно, но такое ощущение, что через одно место.

спустя 37 минут [обр] Владимир Палант [досье]

Может лучше заменить метод addTab у tabbrowser'а? Что-то в таком роде:

var oldAddTabMethod = getBrowser().addTab;
getBrowser().addTab = function(url) {
  alert("Opening new tab: " + url);
  return oldAddTabMethod.apply(this, arguments);
}

Можно еще отлавливать создание нового browser-элемента с помощью события DOMNodeInserted.

спустя 1 месяц 29 дней [обр] Денис Ибаев aka Dionys [досье]

Владимир Палант[досье], спасибо за помощь.

Модератор, тему можно закрыть.

Powered by POEM™ Engine Copyright © 2002-2005