Здравствуйте, semav1, Вы писали:
S>А как реализовывать методы nsIURIContentListener? И ещё надо как-то FireFox'у, чтобы он вызывал методы nsIURIContentListener?
S>Здесь написано: Implement the nsIURIContentListener interface(как?), and register(где?) it with the appropriate web browser object via the nsIWebBrowser::parentURIContentListener attribute.
Например, так
1. Создаешь файлы, необходимые для Firefox расширения структурированные как в xpi-инсталляторе.
К примеру, у тебя будет такая структура:
chrome.manifest
install.rdf
.\chrome\content\my_extension_overlay.js
.\chrome\content\my_extension_overlay.xul
2. В my_extension_overlay.js реализуешь nsIURIContentListener
var myListener =
{
QueryInterface: function(iid)
{
if (iid.equals(Components.interfaces.nsIURIContentListener) ||
iid.equals(Components.interfaces.nsISupportsWeakReference) ||
iid.equals(Components.interfaces.nsISupports))
return this;
throw Components.results.NS_NOINTERFACE;
},
onStartURIOpen: function(aUri)
{
// тут ловишь URL
},
doContent: function(aContentType, aIsContentPreferred, aRequest, aContentHandler )
{
throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
},
canHandleContent: function(aContentType, aIsContentPreferred, aDesiredContentType)
{
throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
},
isPreferred: function(aContentType, aDesiredContentType)
{
return true;
},
GetWeakReference : function()
{
throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
}
}
var wnd = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(Components.interfaces.nsIWebNavigation)
.QueryInterface(Components.interfaces.nsIDocShell)
.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
getInterface(Components.interfaces.nsIURIContentListener);
wnd.parentContentListener = myListener;
3. Регистрируешь свое расширение.
Для этого в папке %APPDATA%\Mozilla\Firefox\Profiles\extensions создаешь файл с таким же названием, как и id твоего расширения (id расширения хранится между тегами <em:id></em:id> файла install.rdf, например myextension@mycompany.com). Содержимым этого файла будет путь к твоему расширению.
После этого удаляешь файл extensions.cache из %APPDATA%\Mozilla\Firefox\Profiles\ и перезапускаешь Firefox.
Это — самый простой способ. Для более продвинутого и/или скрытого от посторонних глаз анализа введенного URL, придется делать XPCOM-объект и звать его из onStartURIOpen твоего ява-скрипта.
S>Сейчас у меня есть такой класс (делал как в примере WebLock):
[...]
Полагаю, что тебе надо реализовать интерфейс nsIObserver и зарегистрировать observer через сервис nsICategoryManager.