Полезная информация

Пользователи не любят читать документацию. Станьте оригинальным, будьте не как все. Ознакомьтесь с нашей базой знаний.

№122-05-2015 16:43:03

IVIAKC
Участник
 
Группа: Members
Зарегистрирован: 22-05-2015
Сообщений: 4
UA: Yandex 15

как выполнить javascript расширения через protocol handler?

подскажите, как написать протокол, чтобы по адресу 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;
  }

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

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

Отсутствует

 

№222-05-2015 16:55:21

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 38.0

Re: как выполнить javascript расширения через protocol handler?

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


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№322-05-2015 17:07:53

IVIAKC
Участник
 
Группа: Members
Зарегистрирован: 22-05-2015
Сообщений: 4
UA: Yandex 15

Re: как выполнить javascript расширения через protocol handler?

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;
  }

Отсутствует

 

№422-05-2015 19:55:23

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 38.0

Re: как выполнить javascript расширения через protocol handler?

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

Выделить код

Код:

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


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№522-05-2015 23:48:59

IVIAKC
Участник
 
Группа: Members
Зарегистрирован: 22-05-2015
Сообщений: 4
UA: Yandex 15

Re: как выполнить javascript расширения через protocol handler?

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

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]