>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >nsIChannel: можно ли из экземпляра получить target ссылки? http://forum.mozilla-russia.org/viewtopic.php?id=58538 |
hydrolizer > 25-03-2013 06:54:21 |
Суть проблемы: есть расширение Redirector, позволяющее осуществлять перенаправление ссылок по задаваемым пользователем правилам - я, например, пользуюсь им для перенаправления с русскоязычных страниц MSDN на англоязычные, что для меня достаточно актуально. Но у этого расширения есть одна проблема: оно не распознает target="_blank" у ссылок, в результате чего ссылки поисковой выдачи гугла, например, попадающие под правила перенаправления, отрываются не в новой вкладке, а в текущей. Хотелось бы это исправить, не дожидаясь автора (СКМ не предлагать - он работает, но хотелось бы все сделать неотличимым от обычного поведения браузера). Выделить код Код:onChannelRedirect: function(oldChannel, newChannel, flags) { try { let newLocation = newChannel.URI.spec; if (!(newChannel.loadFlags & Ci.nsIChannel.LOAD_DOCUMENT_URI)) return; if (!newLocation) return; .......... var win; var webNav; for each (let callback in callbacks) { try { win = callback.getInterface(Ci.nsILoadContext).associatedWindow; webNav = win.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIWebNavigation); break; } catch(e) {} } if (!webNav) { return; } var redirectUrl = this.getRedirectUrl(newLocation); if (redirectUrl) { webNav.loadURI(redirectUrl,null,null,null,null); throw Cr.NS_BASE_STREAM_WOULD_BLOCK; } } catch (e if (e != Cr.NS_BASE_STREAM_WOULD_BLOCK)) { this.debug("Redirector: Unexpected error in onChannelRedirect: " + e + "\n"); } }, т.е. у нас на входе есть только экземпляр nsIChannel, от которого мы получаем исходный url, и определяем требуемый url перенаправления. Вопрос: можно ли как-то из экземпляра nsIChannel (думаю, на самом деле это экземпляр nsIHttpChannel) определить тот факт, что ссылка, по url которой был открыт канал, имела атрибут target="_blank"? При наличии такой возможности можно было бы открывать новую вкладку, и делать редирект в ней. |
hydrolizer > 26-03-2013 07:52:21 |
Вопрос снят. Выяснилось, что расширение вполне нормально обрабатывает target="_blank" - просто в моем случае вышеописанную картину дает конфликт с NoScript. |