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

1. Если вызвать функцию nsINavBookmarksService.moveItem(id, aNewParentId, index) с параметром index, который на 1 больше текущего, то ничего не происходит, элемент не перемещается.

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

cs0ip пишет:

то ничего не происходит

1. Совсем-совсем ничего? В консоли ошибок тоже ничего? И заворачивание в try-catch с выводом в последнем стектрейса тоже не дает ничего? Вообще, без приведенного проблемного кода отвечать на такие вопросы вряд ли кто-то будет.
2. Обычно для этого используют Venkman.

hydrolizer пишет:

cs0ip пишет:

то ничего не происходит

1. Совсем-совсем ничего? В консоли ошибок тоже ничего? И заворачивание в try-catch с выводом в последнем стектрейса тоже не дает ничего? Вообще, без приведенного проблемного кода отвечать на такие вопросы вряд ли кто-то будет.
2. Обычно для этого используют Venkman.

1. Совсем ничего, никаких исключений. Проблемный код очень прост, вызываем указанную функцию с указанным аргументом (<текущий индекс элемента> + 1) и ничего не происходит. Вроде бы дополнительные пояснения тут не нужны. Сейчас пытаюсь понять это баг, как это видится мне, или особо хитрая фича, которая не будет исправлена в следующих версиях.

2. Я его тоже ставил, но он аналогичным образом не видит мои скрипты и падает при любой попытке взаимодействовать.

cs0ip пишет:

это баг, как это видится мне, или особо хитрая фича, которая не будет исправлена в следующих версиях.

Не может это быть багом. Вот код из 22.6b, PlacesUtils.jsm:

Выделить код

Код:

PlacesMoveItemTransaction.prototype = {
  __proto__: BaseTransaction.prototype,

  doTransaction: function MITXN_doTransaction()
  {
    this.item.index = PlacesUtils.bookmarks.getItemIndex(this.item.id);
    PlacesUtils.bookmarks.moveItem(this.item.id,
                                   this.new.parentId, this.new.index);
    this._undoIndex = PlacesUtils.bookmarks.getItemIndex(this.item.id);
  },
.....

и он вполне работает (PlacesUtils.bookmarks - это lazy getter для nsINavBookmarksService). И ничего особенно хитрого здесь тоже не видно.

cs0ip пишет:

но он аналогичным образом не видит мои скрипты и падает при любой попытке взаимодействовать.

В окне Venkman'а в главном меню -> Debug галка на Exclude application files снята?
У себя падений как-то не замечал.

hydrolizer пишет:

Не может это быть багом. Вот код из 22.6b, PlacesUtils.jsm:
.....
и он вполне работает (PlacesUtils.bookmarks - это lazy getter для nsINavBookmarksService). И ничего особенно хитрого здесь тоже не видно.

Может это и не баг. Я ещё понаблюдал за поведением этой функции, и думаю, что с таким поведением можно в принципе жить. Хотя несколько странным кажется тот факт, что для того чтобы переместить элемент на 1 позицию вниз нужно задавать индекс больше текущего на 2. При этом при перемещении вверх только на 1.

hydrolizer пишет:

В окне Venkman'а в главном меню -> Debug галка на Exclude application files снята?
У себя падений как-то не замечал.

Была выставлена галка, но снятние не очень помогло. Проблема в том, что большинство файлов у меня через ajax подгружаются, а Venkman видит только статически указанные. Конечно в продакшене всё будет слито в один файл и будет грузиться статически, но вот на этапе разработки всё грузится динамически и эти файлы в отладчике не видны.

На счет встроенного отладчика, кстати, я бы и не думал про него писать, т.к. раньше он официально не поддерживал работу с расширениями, но к 21 версии поддержка такой работы была официально заявлена, поэтому вот и не понятно стоит ли об этом говорить или они и так всё знают.