подскажите, как написать протокол, чтобы по адресу myprotocol:myscript запускался скрипт myscript.js из моего расширения?

для простого редиректа есть описания с примерами, например https://mike.kaply.com/2011/01/18/writi … l-handler/ или http://talkweb.eu/fosdem-protocol-for-m … sdemabout/

Выделить код

Код:

newChannel: function(aURI)
  {
    var ioservice = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
    var uri = ioservice.newURI("http://google.com/", null, null);
    var channel = ioservice.newChannelFromURI(uri, null).QueryInterface(Ci.nsIHttpChannel);
    return channel;
  }

а как сделать, что запускался скрипт вместо редиректа?

спасибо за помощь.

IVIAKC
Так в реализации newChannel() и запускать что нужно.
Еще можно в protocolFlags добавить URI_DOES_NOT_RETURN_DATA, тогда channel можно не создавать, будет пустая страница.

Infocatcher
можете подробнее написать, или поделиться примером?

так не работает

Выделить код

Код:

newChannel: function(aURI)
  {
    var ioservice = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
    var channel = ioservice.newChannel("javascript:alert('hello');", null, null);
    return channel;
  }

Смотря что надо скриптом делать. И надо ли выполнять разное или всегда одно и то же.
Можно перенаправить на свою внутреннюю страницу, из которой уже запускать скрипт.
А в простейшем случае можно прямо так что-нибудь сделать:

Выделить код

Код:

Components.utils.import("resource://gre/modules/Services.jsm");
var ph = Components.interfaces.nsIProtocolHandler;
...
    protocolFlags: ph.URI_NORELATIVE
        | ph.URI_NOAUTH
        | ph.URI_LOADABLE_BY_ANYONE
        | ph.URI_NON_PERSISTABLE
        | ph.URI_DOES_NOT_RETURN_DATA,
    ...
    newChannel: function(aURI) {
        var window = Services.wm.getMostRecentWindow(null);
        if(window)
            window.alert("Something");
        return null;
    }

Вот два примера протоколов:
https://github.com/Infocatcher/Private_ … col.js#L61
https://github.com/Infocatcher/Handy_Cl … ent.js#L93

спасибо, буду разбираться