Подскажите как можно получить document выбранного таба!
Я получаю документ:
var saveDocument = null; document.addEventListener("DOMContentLoaded", OnDocument, true); function OnDocument(event) { // загруженный document => event. originalTarget saveDocument = event. originalTarget; ... }
как определить при смене табов что это именно saveDocument ?
Отсутствует
Точно не помню, но, кажется, почти всё нужное есть в моём давнишнем скрипте: http://forum.mozilla.ru/viewtopic.php?pid=76627#p76627
ну и ещё, у tabbrowser есть методы getBrowserForTab, getBrowserAtIndex, getBrowserIndexForDocument и свойство mCurrentTab, а у tab есть свойства tabId, tabIndex.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Может ты знаешь как определить к какой закладке, документу,окну относяптя документы загружающиеся через превиденный выше код!
для сайта www.rsdn.ru
использовал:
первый(main) фрейм говорит что относится к закладке 0 а остальные -1 а документ то в целом 1-н
как понять что это грузится один и тотже документ
Отсутствует
Назначить элементу browser каждой вкладки обработчик DOMContentLoaded - он "отловит" загрузку документа и всех его фреймов
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Он и так отлавливает загруз всех документов и фреймов но как их разобрать потом!
Я получил первый документ mainFrame а все остальные фреймы неимеют не индекса browser(тобишь -1) не являются дочерними для главного документа !
Отсутствует
Он и так отлавливает загруз всех документов и фреймов но как их разобрать потом!...
Если window. addEventListener, то конечно, всех. Если добавить addEventListener браузеру вкладки - он отловит только те, которые будут загружаться в этой вкладке. А фреймы и основной документ можно разобрать хотя бы по location.
...Я получил первый документ mainFrame а все остальные фреймы неимеют не индекса browser(тобишь -1) не являются дочерними для главного документа !
Потому что не в табах они. Найти основной документ в mTabs. item'ах, а принадлежность фреймов искать через event. target. defaultView. window. location.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
У меня Экстеншин отслеживает загрузку всех Content-ов на всех имеюшихся табах и для каждого таба строит дерево требуемых элементов.
Я создаю массив структур в которых хранится информация. При преходе OnDocument(event) мне надо понять к какому документу относится текущий Content для записи данных в соответствующий массив.
Может ты можешь более наглядно (на коде) показать как его разсортировать правильно !
Отсутствует
Примерно так:
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ентов на части порвет !!!
Отсутствует
В этом случае тоже непонятно к чему относится массив.
У меня есть:
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; }
Отсутствует
Проще, наверное так:
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ентов на части порвет !!!
Отсутствует
...у меня ругается на mTab...
А у меня не ругается.
...Ошибка: event. currentTarget. mTab has no properties
Уверен на 99,99%, что OnDocument ставится конструкцией window. addEventListener (..., т. к. у window нет свойства mTab.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
я делаю так
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; } }
Отсутствует
А я сделал так: 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ентов на части порвет !!!
Отсутствует
у меня при таком вареанте http://forum.mozilla.ru/viewtopic.php?pid=99949#p99949
Ошибка: this.getBrowserAtIndex(i) has no properties
Источник: chrome://global/content/bindings/tabbrowser.xml
Строка: 201
Отсутствует
у меня приходит 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; } }
Отсутствует
И ещё у меня не получилось проинициализировать первый таб в 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; } } } } //*/ }
Отсутствует
у меня приходит 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ентов на части порвет !!!
Отсутствует
Нагнал немного
Приходит (2 ивента):
1- tab
2- Ошибка: this.getBrowserAtIndex(i) has no properties
Источник: chrome://global/content/bindings/tabbrowser.xml
Строка: 201
Отсутствует
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):
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует