Полезная информация

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

№121-04-2006 12:16:54

CVB
Участник
 
Группа: Members
Зарегистрирован: 13-04-2006
Сообщений: 54

document

Подскажите как можно получить document выбранного таба!
Я получаю документ:

Выделить код

Код:

var saveDocument = null;
document.addEventListener("DOMContentLoaded", OnDocument, true);
function OnDocument(event)
{
        // загруженный document => event. originalTarget
       saveDocument = event. originalTarget;
     ...
}

как определить при смене табов что это именно saveDocument  ?

Отсутствует

 

№221-04-2006 12:23:09

CVB
Участник
 
Группа: Members
Зарегистрирован: 13-04-2006
Сообщений: 54

Re: document

Вопрос в догонку.
Как узнать документ закрытого таба ?

Отсутствует

 

№321-04-2006 14:18:06

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: document

Точно не помню, но, кажется, почти всё нужное есть в моём давнишнем скрипте: http://forum.mozilla.ru/viewtopic.php?pid=76627#p76627

ну и ещё, у tabbrowser есть методы getBrowserForTab, getBrowserAtIndex, getBrowserIndexForDocument и свойство mCurrentTab, а у tab есть свойства tabId, tabIndex.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№421-04-2006 15:28:48

CVB
Участник
 
Группа: Members
Зарегистрирован: 13-04-2006
Сообщений: 54

Re: document

Может ты знаешь как определить к какой закладке, документу,окну относяптя документы загружающиеся через превиденный выше код!
для сайта www.rsdn.ru
использовал:

Выделить код

Код:

window.getBrowser().getBrowserIndexForDocument(event. target)

первый(main) фрейм говорит что относится к закладке 0 а остальные -1 а документ то в целом 1-н
как понять что это грузится один и тотже документ

Отсутствует

 

№521-04-2006 16:57:05

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: document

Назначить элементу browser каждой вкладки обработчик DOMContentLoaded - он "отловит" загрузку документа и всех его фреймов


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№621-04-2006 17:01:48

CVB
Участник
 
Группа: Members
Зарегистрирован: 13-04-2006
Сообщений: 54

Re: document

Он и так отлавливает загруз всех документов и фреймов но как их разобрать потом!
Я получил первый документ mainFrame а все остальные фреймы неимеют не индекса browser(тобишь -1) не являются дочерними для главного документа !

Отсутствует

 

№721-04-2006 17:07:55

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: document

CVB пишет

Он и так отлавливает загруз всех документов и фреймов но как их разобрать потом!...

Если window. addEventListener, то конечно, всех. Если добавить addEventListener браузеру вкладки - он отловит только те, которые будут загружаться в этой вкладке. А фреймы и основной документ можно разобрать хотя бы по location.

...Я получил первый документ mainFrame а все остальные фреймы неимеют не индекса browser(тобишь -1) не являются дочерними для главного документа !

Потому что не в табах они. Найти основной документ в mTabs. item'ах, а принадлежность фреймов искать через event. target. defaultView. window. location.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№821-04-2006 17:20:52

CVB
Участник
 
Группа: Members
Зарегистрирован: 13-04-2006
Сообщений: 54

Re: document

У меня Экстеншин отслеживает загрузку всех Content-ов на всех имеюшихся табах и для каждого таба строит дерево требуемых элементов.
Я создаю массив структур в которых хранится информация. При преходе OnDocument(event) мне надо понять к какому документу относится текущий Content для записи данных в соответствующий массив.

Может ты можешь более наглядно (на коде) показать как его разсортировать правильно !

Отсутствует

 

№921-04-2006 17:23:41

CVB
Участник
 
Группа: Members
Зарегистрирован: 13-04-2006
Сообщений: 54

Re: document

в случае с www.rsdn.ru Content-ты приходят в фоновой загрузке => до окончания загрузки страницы я должен собрать информацию и внести изменения.

Отсутствует

 

№1022-04-2006 13:26:28

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: document

Примерно так:

Выделить код

Код:

function OnDocument (event)
{
    var t = event. target;
    if (window. getBrowser (). getBrowserIndexForDocument (t) != -1)
    {
        // документ имеет "собственную" вкладку
        print ("tab");
    }
    else
    {
        // документ не имеет "собственную" вкладку
        // значит, это фрейм
        print ("frame in tab");
    }
}

function dnins (event)
{
    var t = event. originalTarget;
    if ((t. nodeName == "vbox") || (t. nodeName == "xul:vbox"))
    {
        // добавлена новая вкладка
        // прикрепляем элементу browser вкладки
        // обработчик DOMContentLoaded
        var b = t. getElementsByTagName ("browser") [0];
        b. addEventListener ("DOMContentLoaded", OnDocument, true);
    }
}

var tb = window. getBrowser ();
tb. addEventListener ("DOMNodeInserted", dnins, true);

Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№1124-04-2006 12:23:08

CVB
Участник
 
Группа: Members
Зарегистрирован: 13-04-2006
Сообщений: 54

Re: document

В этом случае тоже непонятно к чему относится массив.

У меня есть:

Выделить код

Код:

function SavedDoc()
{
    this.Url;
//  List All Elem	
    this.listElem = new Array();
}

var listSavedDocument = new Array();

Проблемма заключается в том, как определить numSave для фрейма.
Для каждой закладки он свой

Выделить код

Код:

function OnDocument (event)
{
    try
	{
		SDoc = new SavedDoc;
	}
	catch (err) 
	{
		alert(err);
	}
    SDoc.Url = event.originalTarget.location.href;
//  номер таба
    var numSave= window.getBrowser().getBrowserIndexForDocument(event.originalTarget);
    if ((numSave >= 0) && (listSavedDocument.length < (numSave + 1)))
       listSavedDocument[numSave] = SDoc;
    var NumElem = 0;
//  numSave как его определить ?
    Fun2(event.originalTarget, numSave, NumElem);
}
function Fun2(elem, numSave, numNextElem)
{
    switch(elem.nodeName)
    {
		case 'FORM': numNextElem = GetDataForm(elem, numSave, numNextElem); break;
		case 'INPUT': numNextElem = GetDataInput(elem, numSave, numNextElem); break;
		case 'SELECT': numNextElem = GetDataSelect(elem, numSave, numNextElem); break;
    }
    for (var i=0;i<elem.childNodes.length;i++)
    {
         numNextElem = Fun2(elem.childNodes[i], numSave, numNextElem);	
    }
}

function GetDataForm(elem, numSave, numNextElem)
{
    listSavedDocument[numSave].listElem[numNextElem] = elem;
    return numNextElem;
}

Отсутствует

 

№1225-04-2006 14:10:18

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: document

Проще, наверное так:

Выделить код

Код:

function OnDocument (event)
{
    try
    {
        SDoc = new SavedDoc;
    }
    catch (err) 
    {
        alert (err);
    }
    SDoc. Url = event. originalTarget. location. href;
    var numSave= window. getBrowser (). getBrowserIndexForDocument (event. originalTarget);
    if ((numSave >= 0) && (listSavedDocument. length < (numSave + 1)))
        listSavedDocument[numSave] = new Array ();
    else
        numSave = event. currentTarget. mTab. tabIndex;
    listSavedDocument[numSave]. push (SDoc);
    var NumElem = 0;
    Fun2 (event. originalTarget, numSave, NumElem);
}

listSavedDocument [x] [0] - будет основным документом вкладки с индексом x, а listSavedDocument [x] [n] - это n-й загруженный во вкладке фрейм.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№1325-04-2006 14:32:36

CVB
Участник
 
Группа: Members
Зарегистрирован: 13-04-2006
Сообщений: 54

Re: document

Да так пожалуй лучше будет.
у меня ругается на mTab
Ошибка: event. currentTarget. mTab has no properties

Отсутствует

 

№1425-04-2006 16:23:02

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: document

CVB пишет

...у меня ругается на mTab...

А у меня не ругается.

...Ошибка: event. currentTarget. mTab has no properties

Уверен на 99,99%, что OnDocument ставится конструкцией window. addEventListener (..., т. к. у window нет свойства mTab.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№1525-04-2006 16:32:34

CVB
Участник
 
Группа: Members
Зарегистрирован: 13-04-2006
Сообщений: 54

Re: document

я делаю так

Выделить код

Код:

window.addEventListener("load", ext_onInit, false);
window.addEventListener("unload", ext_onDestroy, false);

function ext_onInit() 
{	
	try
	{
//		Test();
		document.addEventListener("DOMContentLoaded", OnDocument, true);
		document.addEventListener("DOMNodeRemoved", OnTabRemoved, true);
  	}
	catch (err) 
	{
		alert(err);
		return;
	}
}

Отсутствует

 

№1625-04-2006 16:46:37

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: document

А я сделал так: http://forum.mozilla.ru/viewtopic.php?pid=99949#p99949 с добавлением currentTarget (http://forum.mozilla.ru/viewtopic.php?p … 12#p100512).

Если не нравится вариант с назначением каждой вкладке обработчика DOMContentLoaded, могу посоветовать перебор (сам не пробовал)

Выделить код

Код:

var tb = window. getBrowser (); // tabbrowser
for (var i = 0; i < tb. mTabs. length; i++)
{
    t = tb. mTabs. item (i); // tab
    d = tb. getBrowserForTab (t); // document
    f = d. body. getElementsByTagName ('frame');
    for (j = 0; j < f. length; j++)
    {
        cf = f [i]; // frame
        ...

Возможно, есть другой вариант (вроде бы Mash примеры кода на эту тему приводил), но у меня других идей нет.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№1725-04-2006 17:29:11

CVB
Участник
 
Группа: Members
Зарегистрирован: 13-04-2006
Сообщений: 54

Re: document

у меня при таком вареанте http://forum.mozilla.ru/viewtopic.php?pid=99949#p99949

Ошибка: this.getBrowserAtIndex(i) has no properties
Источник: chrome://global/content/bindings/tabbrowser.xml
Строка: 201

Отсутствует

 

№1826-04-2006 13:03:18

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: document

CVB,
у меня ошибок нет. Покажите полный код, может, что-то делаете не так ?


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№1926-04-2006 13:19:32

CVB
Участник
 
Группа: Members
Зарегистрирован: 13-04-2006
Сообщений: 54

Re: document

у меня приходит t. nodeName == 'tab' при добовлении таба

Выделить код

Код:

// Main
window.addEventListener("load", ext_onInit, false);
window.addEventListener("unload", ext_onDestroy, false);

function dnins (event)
{
    alert('In');
	alert(event. target.nodeName); // = tabbrowser
	alert(event. originalTarget.nodeName); // = tab
    var t = event. originalTarget;
//    if ((t. nodeName == "vbox") || (t. nodeName == "xul:vbox"))
    if ((t. nodeName == "tab") || (t. nodeName == "xul:vbox"))
    {
    	alert('Add');
 //        var b = t. getElementsByTagName ("browser") [0];
        t. addEventListener ("DOMContentLoaded", OnDocument, true);
    }
}

function ext_onInit() 
{	
	try
	{
	    var tb = window. getBrowser ();        
		tb. addEventListener ("DOMNodeInserted", dnins, true);
		
		document.addEventListener("DOMNodeRemoved", OnTabRemoved, true);
  	}
	catch (err) 
	{
		alert(err);
		return;
	}
}

Отсутствует

 

№2026-04-2006 13:27:38

CVB
Участник
 
Группа: Members
Зарегистрирован: 13-04-2006
Сообщений: 54

Re: document

И ещё  у меня не получилось проинициализировать первый таб в function ext_onInit()
Вот все попытки которые остались в коде

Выделить код

Код:

function dnins (event)
{
	alert('In');
	alert(event. target.nodeName);
	alert(event. originalTarget.nodeName);
    var t = event. originalTarget;
//    if ((t. nodeName == "vbox") || (t. nodeName == "xul:vbox"))
    if ((t. nodeName == "tab") || (t. nodeName == "xul:vbox"))
    {
    	alert('Add');
        // äîáàâëåíà íîâàÿ âêëàäêà
        // ïðèêðåïëÿåì ýëåìåíòó browser âêëàäêè
        // îáðàáîò÷èê DOMContentLoaded
//        var b = t. getElementsByTagName ("browser") [0];
        t. addEventListener ("DOMContentLoaded", OnDocument, true);
    }
}

function ext_onInit() 
{	
	try
	{
//		Test();
		document.addEventListener("DOMContentLoaded", OnDocument, true);
//		var c = window.getBrowser().getBrowserAtIndex(0);
//		var c = document.getElementById ("content");
//		var tb = window. getBrowser ();
//		var b = document. getElementsByTagName ("browser") [0];
//        tb. addEventListener ("DOMContentLoaded", OnDocument, true);
        
//		tb. addEventListener ("DOMNodeInserted", dnins, true);
		
		document.addEventListener("DOMNodeRemoved", OnTabRemoved, true);
  	}
	catch (err) 
	{
		alert(err);
		return;
	}
}

Пока решил эту проблемму более сложным способом.
А хотелось бы использовать более простой механизм темболее он есть.

Выделить код

Код:

var NumElem = window.getBrowser().getBrowserIndexForDocument(event. target);
	if (NumElem != -1)
	{
		SDoc.host = event. target. location. host;
		SDoc.url = '<url value="' + event. target. location. href + '"></url>';
		SDoc.url2 = event. target. location. href;
		listSavedDocument[NumElem] = new Array();
		listSavedDocument[NumElem].push(SDoc);
		ParseDocument(event. target, NumElem, 0, 0)
	}
	else
	{
//		alert(event. currentTarget. mTab. tabIndex);
//*		
		listSavedDocument[0][0].numFrame++;

		for (var i=0;i<listSavedDocument.length;i++)
		{
			if (listSavedDocument[i] != null)
			{
				var find = false;
				if (listSavedDocument[i][0].host == event. target. location. host)
				{
					for (var j=1;j<listSavedDocument[i].length;j++)
					{
						if (listSavedDocument[i][j].url == event. target. location. href)
						{
							find = true;
						}
					}
					if (find == false)
					{
						SDoc.host = event. target. location. host;
						SDoc.url = '<url value="' + event. target. location. href + '"></url>';
						SDoc.url2 = event. target. location. href;
						listSavedDocument[i].push(SDoc);
						ParseDocument(event. target, i, listSavedDocument[i].length - 1, 0)
						break;
					}
				}
			}
		}
//*/
	}

Отсутствует

 

№2126-04-2006 13:29:37

CVB
Участник
 
Группа: Members
Зарегистрирован: 13-04-2006
Сообщений: 54

Re: document

if (listSavedDocument[i][j].url == event. target. location. href)
должна быть
if (listSavedDocument[i][j].url2 == event. target. location. href)

Отсутствует

 

№2226-04-2006 13:32:57

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: document

CVB пишет

у меня приходит t. nodeName == 'tab' при добовлении таба

Выделить код

Код:

// Main
...
//    if ((t. nodeName == "vbox") || (t. nodeName == "xul:vbox"))
    if ((t. nodeName == "tab") || (t. nodeName == "xul:vbox"))
...

При добавлении новой вкладки сначала добавляется элемент tab (xul:tab в случае первой вкладки), в которых элемента browser нет, а следом - vbox (xul:hbox для первой вкладки), в которых элемент browser есть, в который и нужно добавить обработчик DOMContentLoaded. Когда управление получит обработчик события, в event. currentTarget будет ссылка на элемент browser вкладки, в которой событие произошло, а в event. target (event. originalTarget) - ссылка на документ, загрузка которого инициировала событие.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№2326-04-2006 13:39:08

CVB
Участник
 
Группа: Members
Зарегистрирован: 13-04-2006
Сообщений: 54

Re: document

при добовлении вктадки пришол только tabbrowser и tab
с alert-ами
tabbrowser, tabbrowser
tabbrowser, tab

Отсутствует

 

№2426-04-2006 13:43:40

CVB
Участник
 
Группа: Members
Зарегистрирован: 13-04-2006
Сообщений: 54

Re: document

Нагнал немного

Выделить код

Код:

function dnins (event)
{
	alert('In');
	alert(event. originalTarget.nodeName);

Приходит (2 ивента):
1- tab
2- Ошибка: this.getBrowserAtIndex(i) has no properties
Источник: chrome://global/content/bindings/tabbrowser.xml
Строка: 201

Отсутствует

 

№2526-04-2006 14:13:56

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: document

2- Ошибка: this.getBrowserAtIndex(i) has no properties

Эта ошибка возникает при вызове getBrowserIndexForDocument (...). Где этот вызов, в OnDocument ?
Моя функция такая:

Выделить код

Код:

function OnDocument (event)
{
    var t = event. target;
    if (window. getBrowser (). getBrowserIndexForDocument (t) != -1)
    {
        // документ имеет "собственную" вкладку
        print ("tab");
    }
    else
    {
        // документ не имеет "собственную" вкладку
        // значит, это фрейм
        print ("frame in tab");
    }
}

И ошибок никаких нет. В случае фрейма индекс таба я получаю следующим образом (http://forum.mozilla.ru/viewtopic.php?p … 12#p100512):

Выделить код

Код:

event. currentTarget. mTab. tabIndex

Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]