>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >content.document, добавление вкладки http://forum.mozilla-russia.org/viewtopic.php?id=10332 |
cesspit > 16-05-2006 13:47:22 |
подскажите пожалуйста, если я добавляю из расширения новую вкладку: getBrowser().selectedTab = getBrowser().addTab("http://...."); , то после выполнения этого кода, в content.document будет находится документ новой вкладки? |
CVB > 16-05-2006 13:59:15 |
посмотри document.location.href |
cesspit > 16-05-2006 17:22:40 |
CVB пишет
на самом деле мне нужно открыть новую вкладку в браузере и каким-либо образом узнать об окончании загрузки туда страницы, после чего получить content.document этой новой страницы и работать с ним. Насколько я понимаю, чтобы узнать о конце загрузки нужно подписаться на события браузера через getBrowser().addProgressListener(...). я пробовал вот так: Выделить код Код:var res = getWebNavigation().currentURI.spec; var tab = getBrowser().addTab(res); var br = getBrowser().getBrowserForTab(tab); br.addProgressListener(progressListener1); , не выходит, вылетает с исключением на последней строке. Или может нужно обязательно перейти на новую вкладку и вызвать getBrowser()? window.getBrowser().selectedTab = tab; ? |
Anton > 16-05-2006 18:16:42 |
Может, ошибка в progressListener1 ? Он, как минимум, должен быть таким: Выделить код Код:var progressListener1= { QueryInterface: function (aIID) { if (aIID. equals (Components. interfaces. nsIWebProgressListener) || aIID. equals (Components. interfaces. nsISupportsWeakReference) || aIID. equals (Components. interfaces. nsIXULBrowserWindow) || aIID. equals (Components. interfaces. nsISupports)) return this; throw Components. results. NS_NOINTERFACE; }, onLocationChange: function (a,b,c) {}, onProgressChange: function (a,b,c,d,e,f) {}, onSecurityChange: function (a,b,c) {}, onStateChange: function (a,b,c,d) {}, onStatusChange: function (a,b,c,d) {} }; |
cesspit > 16-05-2006 18:40:50 |
Anton пишет
не похоже, привязывается и реагирует нормально если вызывать "getBrowser.addProgressListener(progressListener1)" в OnLoad расширения или в обработчике клика по кнопке и если не открывать никаких вкладок (хотя в нём и не реализована QueryInterface). |
Anton > 16-05-2006 19:10:02 |
cesspit пишет
Вот мой код, запускаемый из CustomButton: Выделить код Код:var progressListener1= { QueryInterface: function (aIID) { if (aIID. equals (Components. interfaces. nsIWebProgressListener) || aIID. equals (Components. interfaces. nsISupportsWeakReference) || aIID. equals (Components. interfaces. nsIXULBrowserWindow) || aIID. equals (Components. interfaces. nsISupports)) return this; throw Components. results. NS_NOINTERFACE; }, onLocationChange:function (a,b,c){}, onProgressChange:function(a,b,c,d,e,f){}, onSecurityChange:function(a,b,c){}, onStateChange:function(a,b,c,d){}, onStatusChange:function(a,b,c,d){} }; var res = "http://ya.ru"; var tab = getBrowser().addTab(res); var br = window.getBrowser().getBrowserForTab(tab); br.addProgressListener(progressListener1); ошибок не вижу. |
cesspit > 16-05-2006 19:24:58 |
спасибо огромное, Антон! |
Anton > 16-05-2006 19:41:34 |
cesspit пишет
Не только привязывается, но и работает ? Может, привязывается, но не используется - никто не запрашивает у него интерфейс. |
cesspit > 16-05-2006 20:38:46 |
Anton пишет
и привязывается и работает, я подебажил, и оказ-ся если привязывать для текущей вкладки: если QueryInterface есть - она вызывается, но если её нету - ничего страшного не происходит. А если привязывать для новой - падает Антон, у меня ещё один вопрос на повестке дня , может есть в мозиле средства чтобы реализовать то что я хочу. |
Anton > 16-05-2006 21:02:22 |
cesspit пишет
Нет, тут я пас. В своё время бился над похожей задачкой, как решается - до сих пор не знаю. Может, кто другой подскажет. |
cesspit > 17-05-2006 17:26:27 |
эх, сделал как в IE, сердце кровью обливается |