Полезная информация

Пользователи не любят читать документацию. Станьте оригинальным, будьте не как все. Ознакомьтесь с нашей базой знаний.

Разработка » Обращение к js из-под chrome » 18-04-2008 16:52:28

спасибо большое! проблема решена
а задание xpcnativewrappers=no оказалось забавным - оно сделало document без обертки, но window все же оставался с оберткой. Совет Anton'a помог решить и это.

Разработка » Обращение к js из-под chrome » 18-04-2008 13:08:48

Да, пробовал, и с задержкой, но и тогда, когда вся страница уже загружена ничего не находится.
Я думаю что дело в следующем http://developer.mozilla.org/en/docs/XP … iveWrapper
Согласно пункту 1 нельзя устанавливать обработчики. Аналогично, как я понял, нельзя получить доступ и к переменным и объектам.
Однако тот же FireBug в консоли спокойно работает со всем этим добром... Как??

updated
в файле chrome.manifest в папке расширения firebug была обнаружена строчка:
content firebug jar:chrome/firebug.jar!/content/firebug/ xpcnativewrappers=no
видимо поэтому и не используются обертки и файрбаг спокойно работает со всем добром внутри страницы. А где я должен это прописать?

Разработка » Обращение к js из-под chrome » 17-04-2008 16:21:48

Не подскажете, как можно обратиться к яваскрипту на загруженной странице?
Например там есть объект window.dojo (window странички, не из-под chrome), а в расширении я до этого dojo достучаться не могу. Аналогично не могу установить и window.onload. Вернее оно не срабатывает.
Объект window получаю так: getBrowser().selectedBrowser.contentWindow. Не знаю, правильно ли это...

Разработка » Послать событие MouseEvent » 28-09-2007 15:57:43

ХХА! Я тупил. Пытался в yahoo.com почте выбрать папку Spam. Код для каждой папки там такой:

Выделить код

Код:

<tr style="display: table-row;" onmouseup="Jo(event,this);" onmouseover="w2(event,this);" class="folderRow axsTreeitem axsSelectable" title="Spam contains 0 messages">
<td class="folderCell" style="display: table-cell;" nowrap="nowrap">
  <div style="position: relative;">
    ...
    <span class="folderNameElem" id="_test_%40B%40Bulk" style="left: 36px;">Spam</span>
    ...
  </div>
</td>
</tr>

И я слал click полагая, что он будет расценен как последовательность событий mousedown, mouseup, click (как это бывает в системном программировании), однако сейчас послал конкретно mouseup и все заработало.

Всем большое спасибо за желание помочь.

Разработка » Послать событие MouseEvent » 28-09-2007 09:12:25

На написанное в консоле (неважно click() или onclick()):

Выделить код

Код:

Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getMostRecentWindow("navigator:browser").getBrowser().selectedBrowser.contentWindow.document.getElementById('_test_Sent').onclick()

Выдается:

Выделить код

Код:

Ошибка:
Components.classes['@mozilla.org/appshell/window-mediator;1'].getService(Components.interfaces.nsIWindowMediator).getMostRecentWindow("navigator:browser").getBrowser().selectedBrowser.contentWindow.document.getElementById("_test_Sent").onclick
is not a function

Еще раз упоминаю о том, что элемент - не кнопка или ссылка, а тег <span>.
Кстати, что интересно, искать элемент с id = "_test_%40B%40Bulk" этот код вообще отказывается, выдавая null, хотя в расширении он его успешно находит.

Ну а все же, может есть способ вызвать js-функцию определенную на самой странице?

Разработка » Послать событие MouseEvent » 27-09-2007 19:54:37

только onclick() :D
хорошо, как правильно обратиться к ее document? getBrowser().contentDocument ? не работает...

Разработка » Послать событие MouseEvent » 27-09-2007 19:30:24

ты проверял код в chrome или только в коде страницы? если только в коде страницы, то там и приведенный мной выше код с dispatchEvent работает... А тут выдает на onclick():

Ошибка: [Exception... "Component is not available"  nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)"  location: "JS frame :: chrome://mhookforms/content/actions.js :: getFolderLinks :: line 127"  data: no]

getFolderLinks - это та функция в которой этот код размещен

Разработка » Послать событие MouseEvent » 27-09-2007 18:56:20

Ошибка: spamLink.click is not a function

Насколько я знаю, этот метод есть только под IE. Дело осложняется тем, что нужно кликнуть не на ссылку а на элемент <span>.

На странице это нажатие должна обработать некая функция Jo(event, target). Я ведь могу передать в нее найденный элемент и созданное событие, вот только как ее вызвать? Просто Jo окончилось неудалчей...

Разработка » Послать событие MouseEvent » 27-09-2007 18:08:53

Пытаюсь послать событие из под chrome (перекрывает browser, navaigator), так:

Выделить код

Код:

var win = window._content.document;		
  var spamLink = win.getElementById('_test_%40B%40Bulk');
  var mouseEvent = win.createEvent("MouseEvent"); 
  mouseEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
  spamLink.dispatchEvent(mouseEvent);

Но оно не посылается, делал addEventListener для spamLink и оно не сработало. Как выполнить щелчок по ссылке?
(не переход на другую страницу, а именно щелчок!)

PS: возможно проблема в 4м аргументе initMouseEvent, но как тогда получить объект окна загруженной страницы?

Разработка » узнать url страницы (проблемы) » 11-09-2007 16:24:41

I'll be back )

По некоторым причинам получилось что мен надо все же ловить событие полной загрузки страницы - с картинками, флешем и т.п. Ясное дело, DOMContentLoaded срабатывает до всего этого. А ловя событие load я не могу узнать url загруженной страницы.
Если бы была одна вкладка, то и ладно - ясно что за страница, но вкладок много и грузятся страницы и их контент ясное дело не последовательно.

Выручите, а? Может есть способ получить url из события load?

Прошу прощения, когда же я, блин, буду внимательно читать чужие мессаги

Разработка » узнать url страницы (проблемы) » 10-09-2007 10:23:26

спасибо, все получилось, главное - надо было использовать событие DOMContentLoader, а не load.

Разработка » узнать url страницы (проблемы) » 07-09-2007 19:40:17

вы хотите выполнить код (получить урл) при загрузке определённого таба браузера?
почему же вы тогда вешаете обработчик на window? в каком chrome выполняется скрипт?
какие табы вы имеете ввиду в первом посте?

1. не определенного, а любого. а уж урл конечно того, который загрузился.
2. куда вешать? перекрывается browser.xul и navigator.xul
3. ммм... Вкладки. Если в одном окне фокса открыто две страницы, то будут две вкладки. Вы меня в тупик поставили, какие еще табы бывают?

Разработка » узнать url страницы (проблемы) » 07-09-2007 19:19:38

если правильно понял вопрос - в расширении. Код примерно такой (лишнее обрезано):

Выделить код

Код:

function actions() {
	
   this.doLoad = doLoad;

   function doLoad(ev) {
      // here we are :)
   }
}

var actions = new actions();
window.addEventListener("load", actions.doLoad,true);

Разработка » узнать url страницы (проблемы) » 07-09-2007 18:44:08

По событию onload надо получить url загруженной страницы.
Обращаться просто к window._content.document.location не решение из-за следующей проблемы:
если открыть несколько вкладок и нажать (re)load на первой, а потом, до загрузки страницы перейти на вторую закладку, то window._content.document.location вернет адрес второй страницы.

Если я правильно понимаю достичь желаемого можно используя event в обработчике onload, только я не пойму как :blush:

пысы: поиском пользовался, ничего не нашел, так что если было - не бейте, а дайте ссылку

Разработка » JavaScript в XPCOM » 05-09-2007 17:46:57

Кто знает как можно выполнить код на ява скрипте в компоненте?

смотрю на http://www.xulplanet.com/references/xpc … cript.html, пытаюсь разобраться, но как-то нехватает описаний (выдает 404)  nsIScriptElement и nsIDocument. Смотрел описание nsIScriptElement.h, и так понял, что этот компонент может только выдавать содержимое скрипта, но присвоить и выполнить его не может.
Если правильно понял это должен делать nsIScriptLoader.processScriptElement, но что ему передать, хз...

Разработка » Проблемы с XPCOM » 04-09-2007 18:04:14

:/ и снова я со всем разобрался... нужно было использовать в idl тип DOMString, а в cpp - nsEmbedString

Разработка » Проблемы с XPCOM » 04-09-2007 17:06:25

:/ эх... все получилось, работает отлично (если кому надо научу как :) ), доступ к DOM-структуре тоже получен, казалось бы все хорошо.
НО. нужно чтобы экспортируемая функция возвращала не число там какое-нибудь, а самую что ни на есть строку. Пока сделать этого не получается, передается указатель (char*), а не строка. Делать возвращаемый тип фиксированной длины я тоже не хочу, т.к. в будущем должны отдаваться строки произвольной длины...
как сделать, а?

Разработка » Проблемы с XPCOM » 02-09-2007 18:18:27

читал материал:
http://forum.mozilla-russia.org/doku.php?id=development:extension:mozilla

расширения делать получается, проблем нет. с xpcom - проблема. если кто-то выполнял этот пример, ответьте, плиз, gecko-sdk какой версии юзали?

я скачал 1.7. Но к сожалению в нем не было nspr4.lib, поэтому скомпилировать в VCpp6 не удалось. скачал 1.8. пробовал скомпилировать в нем - ошибка на стадии линковки. Тогда (как мне кажется бредовое действие) я скопировал nspr4.lib из 1.8 в 1.7 и скомпилировал. Удачно.

Далее пробовал зарегистрировать согласно разделу "Установка для Mozilla". Проблем не возникло, но пример на html идущий в составе xpcom-sample.zip не заработал (возможно потому что у меня FF 2.0.0.6).

Может у кого-то есть опыт разработки xpcom компонент, помогите советом! Очень-очень надо.

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]