Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Расширение firefox для открытия вкладок


Автор: ksfinks 21.11.2009, 23:12
Здравствуйте, помогите пожалуйста с написанием расширения для firefox. Проблема в слабом знании JavaScript.

Описание задачи:

Нужно добавить на в нижнюю часть браузера кнопку, позволяющую переходить по ссылкам определенного вида, расположенным на открытой в данный момент вкладке.

Что сделано.

Взял пример расширения отсюда: http://design-challenge.mozillalabs.com/resources/#extension_bootcamp

Оно добавляет кнопку, при щелчке на которой выводится HelloWorld в командную строку.

файл описания интерфейса 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="submitExtension.onCommand(event)"/>
  </statusbar>
</overlay>


файл скрипта browser.js:

Код

let HelloWorld = {
  onCommand: function(event) {
    dump("Submitted!\n");
  }
};


Все работает. Только проблема с тем, что не знаю что значит let, переписал по аналогии для моей задачи. Получилось следующее:

Код

let submitExtension = {
   onCommand: function(event) {
   
   let iter = document.evaluate("//a[.='[RU]']", document, null, XPathResult.ANY_TYPE, null);
   let curr = iter.iterateNext();
   while(curr)
    {
       // _console.log(curr.getAttribute('href'));
      window.open(curr.getAttribute('href'));
      curr = iter.iterateNext();
    }

  }
    dump("Submitted!\n");
  }

};


В результате ошибка 

Ошибка: missing } after property list
Источник: chrome://submitextension/content/browser-3.js
Строка: 14, символ: 1
Исходный код:
 dump("Submitted!\n"); 

Подскажите, как можно переписать, чтобы заработало?
  






Автор: ksfinks 22.11.2009, 12:07
Переписал код по-другому:
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");

}



строка "Submitted" выводится, а вот вкладки не открываются.

P.S. Тот же код в скрипте для Greasemonkey работает. 
P.P.S.  Путь //a[.='[RU]'] тоже верен. Проверял в XPather


  

Автор: ksfinks 22.11.2009, 12:43
Похоже не работает самая первая строчка кода:

Код

var iter = document.evaluate("//a[.='[RU]']", document, null, XPathResult.ANY_TYPE, null);


В iter получается null.

В чем может быть причина, если XPather эти ссылки находит?

Автор: ksfinks 23.11.2009, 21:37
Проблема решена

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)