Добрый день.
Извиняюсь может и был такой вопрос но писк не дал результатов.
Я ради получения опыта делаю аналог Speed Dial.
Возник вопрос как он вставляет свою xul при создании нового таба? Перерыл документацию на сайте developer.mozilla.org нечего подобного не нашел.
Если вопрос глупы. Можно ткнуть носом в документацию. Заранее спасибо.

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

Так и сделал. Думал есть более правильный способ. Спасибо за ответ.

Ход работает но при такой загрузки xul в адресной строке видно chrome://ext/content/newtab.xul.
Нашел способ как убрать данный косяк. newtab.linkedBrowser.userTypedValue = ""
Но в этом случае если в этом табе перейти на какую нибудь страницу. А после вернуться назад по кнопке back. В адресной строке опять появляться url chrome://ext/content/newtab.xul и убрать его не получается. Уже перерыл все исходники Speed Dial. Но не понимаю как там это реализовано. Может у кого нибудь есть идеи?
Заранее Спасибо

Не совсем понятно чему равно gURLBar??
В коде который выше в условие
if (newtabhomepage.prefs.getBoolPref("newtabhomepage.selectnewtab"))
не заходит.

Выдает ошибку:

Ошибка: gURLBar is not defined
Строка: 355

Содержимое строки: gURLBar.select();

Сейчас постараюсь сделать пример.

kirill09
gURLBar есть только в контексте главного окна FF. Если приведенный выше код выполняется в другом окне, то в нем этого gURLBar нет.

Как и обещал пример
http://itstorage.ru/newapp.zip
Код упрощен до минимума.
Суть проблемы таже. Открываем вторую вкладку вылезет моя xul в адресной строке пусто переходит на какой нибудь сайта. Нажимаем кнопку назад в адресной строке. Путь к xul:(((

kirill09
Ээмм... вас направили по несколько неправильному пути. Все делается намного проще: при старте браузера нужно в контексте главного окна выполнить

Выделить код

Код:

gInitialPages.push("chrome://myextension/content/mywindow.xul")

- и всё.

Не работает. Ошибок не выдает но xul не встает вместо пустой станицы

kirill09
Моя предыдущая реплика относилась только к скрытию URL в строке адреса.

Понял но не работает.
http://itstorage.ru/newapp.zip вот пример я его уже по разному перекрутил. Но url после возврата хоть как появляется:(((((((

kirill09 пишет

Понял но не работает.
http://itstorage.ru/newapp.zip вот пример я его уже по разному перекрутил.

Ну еще бы - в архиве по ссылке в коде нигде не упоминается этот gInitialPages.
Вот подправленное мною ваше расширение: http://dl.dropbox.com/u/14131025/newapp.xpi - всё работает. Правки в основном заключались в удалении всей вышеприведенной очистки urlbar через ивенты. Поскольку ивенты для задачи скрытия URL в адресной строке не нужны. Вообще.

Спасибо. Очень сильно помогли. Спасибо спасибо спасибо

Присоединяюсь к вопросу, но только интересует добавление своего xul-а на вкладку в отдельном окне(отдельно приложение, запускаемое при помощи xulrunner-а), а не в браузере. Т.е как добавить свой xul на вкладку или открыть его в отдельном окне(не браузера)? :)

xterro
У вас xul создается динамически?

hydrolizer пишет

xterro
У вас xul создается динамически?

В смысле? Задача такая: есть некоторое окно с вкладками и списком(деревом), пользователь кликает по элементы списка и в tabs добавляется вкладка с моим xul, который берётся из файла(по крайней мере я так предполагаю делать, т.е наготовить всех необходимых "форм" и открывать их во вкладке или отдельном окне, если в отдельном окне, то скажем, пользователь кликает правой кнопкой мыши по элементу списка и выбирает - ОТкрыть в новом окне, тогда создаётся новое окно и в него загружается мой xul файл), потому как зашивать в JS код описание xul формы, думаю не есть гуд. Как то так... я думаю.

xterro
В смысле, если у вас уже есть готовые xul в виде файла, то в чем проблема? Открывать в новом окне - вообще просто:

Выделить код

Код:

window.openDialog("chrome://myextension/content/my-some-file.xul",
    "_blank", "chrome,dialog,modal,resizable,centerscreen");

в новой вкладке - через размещение в новой вкладке iframe, и задание для него contentDocument.location, указывающий на ваш xul (tabbrowser в расширениях использовать нельзя, он только для главного окна).

hydrolizer пишет

xterro
В смысле, если у вас уже есть готовые xul в виде файла, то в чем проблема? Открывать в новом окне - вообще просто:

Выделить код

Код:

window.openDialog("chrome://myextension/content/my-some-file.xul",
    "_blank", "chrome,dialog,modal,resizable,centerscreen");

в новой вкладке - через размещение в новой вкладке iframe, и задание для него contentDocument.location, указывающий на ваш xul (tabbrowser в расширениях использовать нельзя, он только для главного окна).

Я так понимаю это в контексте расширения? А если я делаю отдельное приложение, то методы те же самые(openDialog, iframe и contentDocument)? Ещё такой момент, если я использую xulrunner, сделал структуру каталогов как указано в докуметации, могу ли я при указании пути использовать префикс chrome://, как он используется?

xterro пишет

Я так понимаю это в контексте расширения? А если я делаю отдельное приложение, то методы те же самые(openDialog, iframe и contentDocument)?

xterro пишет

могу ли я при указании пути использовать префикс chrome://

Насколько я знаю, да. В документации на MDN обычно специально оговаривается, если та или иная функциональность имеет специфику конкретного приложения (например, может использоваться только в FF/TB/SM etc.). Ни за чем из вышеперечисленного я таких оговорок в документации не припоминаю.
Да и кроме того, "практика - критерий истины". Попробуйте.