>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Перехват события onClick http://forum.mozilla-russia.org/viewtopic.php?id=8239 |
boroda > 09-02-2006 16:10:37 |
Ну в общем, загружена страница somepage.htm: Выделить код Код:<HTML> <HEAD> </HEAD> <BODY> <form name="form1" action="http://localhost:8080/test.jsp" method="POST"> <input type="text" name="sometext"><br> <input type="button" name="push" value="OK"><br> </form> </BODY> </HTML> Как мне в расширении отловить событие onClick на странице somepage.htm? |
RcT > 09-02-2006 16:18:27 |
boroda
событие чего, нажатия на кнопку? А зачем, дальше что необходимо сделать |
beotiger > 09-02-2006 18:36:41 |
Ты мешаешь HTML и XUL файлы. Чтобы сделать формочку для расширения, с отловом всех событий, надо писать помесь XUL и JS файлов (или засунуть всё в однин, но мазиловцы этого не рекомендуют). |
Anton > 10-02-2006 07:15:43 |
Если не отлавливается событие 'click', то уж 'mbuttondown' точно должно. |
boroda > 10-02-2006 15:58:49 |
RcT пишет
да, я хочу отловить событие onClick при нажатии на кнопку push на странице somepage.htm |
boroda > 10-02-2006 16:55:30 |
Anton пишет
Anton А вообще как я могу добраться к элементу страницы из расширения и на выходе ошибка Выделить код Код:Error: window._content.document.form has no properties Source File: chrome://test/content/execute_test.js Line: 28 У меня ФФ 1.0.6 |
Anton > 10-02-2006 22:33:06 |
boroda пишет
Я то же самое имел в виду. Добавь в окно обработчик onclick: Этот обработчик отработает первым.
Выделить код Код:function getTopWin () { var windowManager = Components. classes ['@mozilla.org/appshell/window-mediator;1']. getService(); var windowManagerInterface = windowManager. QueryInterface (Components. interfaces. nsIWindowMediator); var topWindowOfType = windowManagerInterface. getMostRecentWindow ("navigator:browser"); if (topWindowOfType) { return topWindowOfType; } return null; } function getContent () { var cont = getTopWin (). getBrowser (). contentDocument; var c2 = cont; try { cont = new XPCNativeWrapper (cont). wrappedJSObject; } catch(e) {} if (!cont) cont = c2; return cont; } var c = getContent (); Теперь можно искать нужный элемент: Выделить код Код:var forms = c. getElementsByTagName ("form"); for (var i = 0; i < forms. length; i++) if (forms [i]. getAttribute ("name") == "...") ... |
boroda > 13-02-2006 17:20:57 |
Спасибо Вам Anton Он срабатывает при нажатии кнопки в любой области окна ФФ. А мне надо чтобы он срабатывал только при нажатии на кнопку push на странице somepage.htm. Не подскажите что делать? Кто-нибудь Заранее спасибо |
Anton > 13-02-2006 18:07:03 |
boroda пишет
1. Если текущая вкладка содержит somepage.htm, то 2. Если в окне имеется обработчик события click с аргументом event и происходит нажатие на кнопку то |
boroda > 13-02-2006 19:25:34 |
Извините Anton, но башка моя совсем отказывается соображать. Я не очень понял ваше сообщение. Выделить код Код:window.addEventListener ("click", clickHandler, true); function clickHandler(event) { Не понимаю что должно быть здесь:( } Также не понимаю Выделить код Код:Если в окне имеется обработчик события click с аргументом event и происходит нажатие на кнопку Код: <input type="button" name="push" value="OK"> то Код: event.target="input" // или "html:input" Причем тут event.target="input", если event.target возвращает object XULElement |
Anton > 13-02-2006 19:38:32 |
Я ошибся, не event.target, а event.target.nodeName. Выделить код Код:window.addEventListener ("click", clickHandler, true); function clickHandler(event) { if ((window._content.location.href == "адрес страницы somepage.htm") && (event.target.nodeName=="input")) { // делаем нужное } } |
boroda > 14-02-2006 12:06:10 |
Спасибо Anton При нажатии на текстовое поле event.target.nodeName==INPUT но когда я нажимаю на кнопку , то event.target.nodeName==tabbrowser Почему так? |
Anton > 14-02-2006 12:27:52 |
boroda пишет
Я, честно говоря, не знаю. Но знаю, как решить. Вот так: |
boroda > 14-02-2006 13:59:37 |
Спасибо за помощь. С меня пиво |