>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Проблема с написанием расширения для Firefox. Помогите, плиз. http://forum.mozilla-russia.org/viewtopic.php?id=41988 |
ksfinks > 22-11-2009 13:56:23 |
Задача. Сделать кнопку в нижней части окна firefox, с помощью которой можно будет открывать или все гиперссылки на странице или гиперссылки с определенным текстом. Взял в качестве примера HelloWorld отсюда http://design-challenge.mozillalabs.com/re...ension_bootcamp и переделал под свою задачу. Вот что получилось: файл browser.xul Выделить код Код:<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <script type="application/javascript" src="chrome://submitExtension/content/browser-3.js"/> <statusbar id="status-bar"> <button label="Submit!" insertafter="statusbar-display" oncommand="OpenTabs()"/> </statusbar> </overlay> файл browser.js Выделить код Код:function OpenTabs() { var iter = document.evaluate("//a[.='[RU]']", document, null, XPathResult.ANY_TYPE, null); var curr = iter.iterateNext(); while(curr) { // _console.log(curr.getAttribute('href')); window.open(curr.getAttribute('href')); curr = iter.iterateNext(); } dump("Submitted!\n"); } В результате при щелчке по кнопке Submit, описанной в browser.xul должны открываться вкладки по всем ссылкам с текстом [RU]. Проблема в том, что iter.iterateNext() почему-то возвращает null. Подскажите, в чем может быть ошибка? P.s. Тот же код в скрипте для Greasemonkey работает. |
ksfinks > 22-11-2009 14:51:43 |
okkamas_knife пишет
iterateNext() - метод объекта iter, который имеет тип XPathResult. Если бы библиотека ХPath не поддерживалась, то и document.evaluate не выполнялся бы. Он же выполняется и в iter есть какое-то не null значение |
Infocatcher > 22-11-2009 18:34:59 |
ksfinks Попробуйте заменить document на content.document, а window.open() – на gBrowser.addTab(). |
ksfinks > 22-11-2009 20:31:18 |
Infocatcher пишет
Спасибо. Заработало. |
ksfinks > 23-11-2009 15:37:30 |
Снова нужна помощь. Получился вот такой код browser.js (основан на примере отсюда https://developer.mozilla.org/en/nsIWindowMediator): Выделить код Код:function SubmitTabs() { var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"] .getService(Components.interfaces.nsIWindowMediator); var enumerator = wm.getEnumerator("navigator:browser"); while(enumerator.hasMoreElements()) { var win = enumerator.getNext(); // win is [Object ChromeWindow] (just like window), do something with it win.content.document.forms[0].submit(); dump("Submitted!\n"); } } В результате submit выполняется, но только на выбранной вкладке. В чем может быть причина?. В примере написано: "This code iterates over all windows of the specified type". |
Infocatcher > 23-11-2009 16:36:47 |
ksfinks пишет
Ну да, окна и перебираются – но не вкладки. win.content ссылается на объект window внутри текущего элемента <browser>. Выделить код Код:while(enumerator.hasMoreElements()) { var win = enumerator.getNext(); win.gBrowser.browsers.forEach( function(br) { var doc = br.contentDocument; doc.forms[0].submit(); } ); } |
ksfinks > 05-04-2010 14:59:14 |
Здравствуйте. У меня снова вопрос. Как в коде Javascript обращаться к свойствам элементов интерфейса? Если конкретно, то есть такая проблема: Добавил на панель состояния браузера кнопку и текстовое поле. Выделить код Код:<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <script type="application/javascript" src="chrome://submitExtension/content/browser_select.js"/> <statusbar id="status-bar"> <button label="Submit!" insertafter="statusbar-display" oncommand="SelectOptions()"/> <textbox id="GroupId" insertafter="statusbar-display" value="Enter GroupId here"/> </statusbar> </overlay> Теперь мне нужно использовать текст из textbox в коде Javascript. Как это сделать? Код такой: Выделить код Код:br.contentDocument.forms[0].getElementsByTagName('select')[0].value = значение из textbox |
luitzen > 05-04-2010 19:01:13 |
ksfinks пишет
Кажется, вы путаете атрибут 'value' и свойство 'value', на самом же деле хотите примерно вот чего: |
ksfinks > 06-04-2010 14:07:47 |
luitzen, тут именно атрибут. Смысл кода в том, чтобы при загрузке страницы в списке br.contentDocument.forms[0].getElementsByTagName('select')[0] выбирался элемент со значением из textbox. Пока я устанавливаю его в ручную: все работает нормально. Но при этом мне каждый раз приходится менять код расширения и перезапускать firefox. Хотелось бы, чтобы нужное значение бралось из textbox |
luitzen > 06-04-2010 15:15:05 |
Ой, ну и ересь я написал в прошлый раз . Имелось в виду вот что: Но если наоборот, то вот так, наверное: Вместо "this" подставьте что нужно. |