Страницы: 1
После клика по кнопке тулбара открывается новая вкладка, в которой грузится страница с формой, полям передаются нужные значения, но мне нужно сымитировать событие onchange, почему-то это оказалось не так просто: дальше строчки window._content.document.getElementById('selectid').onchange() код не выполняется.
<script> function autospo_LoadURL(URL){ gBrowser.selectedTab= gBrowser.addTab(URL); window.content.focus(); } autospo_LoadURL('http://site.ru'); if (document.addEventListener) { document.addEventListener("DOMContentLoaded", init, false); } function init(){ if (arguments.callee.done) return; arguments.callee.done = true; window._content.document.getElementById('selectid').onchange(); for (h = 0; h < arr_mess.length; h=h+2){ if(arr_mess[h] == "short_descr"){ window._content.document.getElementById(arr_mess[h]).innerHTML=window._content.document.getElementById(arr_mess[h]).innerHTML+arr_mess[h+1]+'\n'; } else{ window._content.document.getElementById(arr_mess[h]).value=arr_mess[h+1]; } } } </script> <form method="post" id="formid" name="formname"> <select name="selectname" id="selectid" onChange="alert('dsdsadsa');"> <option value="1" />111 <option value="2" />222 <option value="3" />333 </select> </form>
Отсутствует
А не надо потому что функции со страниц запускать.
или
createEvent/dispatchEvent:
https://developer.mozilla.org/samples/d … Event.html
Впрочем, можно и
Но лучше так не делать.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Возник другой вопрос по вышеизложенному коду. Когда я меняю событие с DOMContentLoaded на load, программа по какой-то причине не заполняет поля на вновь открытой вкладке. Если вставить alert до цикла, то на заднем плане мессаги все загружается как надо. Дело в том, что мне помимо onchange, надо еще запустить onclick для ссылки, которая отправит данные в FCKeditor, но последний как я понимаю с DOMContentLoaded не успевает загрузится. Если вставить setTimeout, то проблема отпадает. Но этот вариант нерационален и нестабилен.
Отсутствует
Событие load, помнится, не «всплывает» (точнее, перехватывается или в <browser>, или в <tabbrowser>, наверное).
.addEventListener("load", init, true);
должно помочь.
Разве что можно поймать событие совсем не оттуда, откуда нужно, так что есть смысл или проверку делать, или что-то вроде
var tab = gBrowser.selectedTab= gBrowser.addTab(URL); tab.linkedBrowser.addEventListener ...
Отредактировано Infocatcher (15-12-2009 23:10:07)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Да, действительно проблема неработоспособности load была в неправильном назначении объекта. Но к сожалению событие load тоже не катит - в FCKeditor данные, как и в случае с DOMContentLoaded, передаются только если выставить setTimeout(function (){gBrowser.loadURI("javascript: document.getElementById('autogen').onclick();");},1000). Что еще можно попробовать ?
Добавлено 16-12-2009 10:43:36
FCKeditor вроде как загружается через iframe. Может из-за этого load не работает так мне надо. Можно ли использовать что-то вроде
?
Отсутствует
FCKeditor вроде как загружается через iframe. Может из-за этого load не работает так мне надо.
Угу, сначала будет событие load от «главной» страницы и уже потом от фреймов.
var url = "some_page_with_frames"; var tab = gBrowser.selectedTab = gBrowser.addTab(url); var win = tab.linkedBrowser; win.addEventListener("DOMContentLoaded", function(e) { _log(e.target.location.href); }, true); function _log(s) { setTimeout(function() { throw s; }, 0); }
Ну, или
Components.classes["@mozilla.org/consoleservice;1"] .getService(Components.interfaces.nsIConsoleService) .logStringMessage(s);
(просто первое легче запомнить )
Но можно, конечно, дождаться загрузки страницы, получить ссылку на нужный фрейм и ждать его загрузки.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Страницы: 1