私はカスタムプロトコルを簡単に実装しています。 newURIメソッドは3つの引数(spec、charset & baseURI)とをとります。 "プロトコルに相対URIの概念がない場合、3番目のパラメータは無視されます"。nsIProtocolHandlerとnsIURI:自己作成プロトコルの相対URL
だから私はこの多田のようにページを開く:newURIがある(
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Product SYSTEM "product.dtd">
しかし、私は自分のプロトコルにproduct.dtdに関するすべての要求が表示されない:XMLは、この始まるました//ドメイン/ samplepage呼び出されることさえありません)。私は私の実装で一味違いますか? BTW:ページ自体は正しく開きますが、DTDファイルへのリクエストはありません。
const
Cc = Components.classes,
Ci = Components.interfaces,
Cr = Components.results,
Cu = Components.utils,
nsIProtocolHandler = Ci.nsIProtocolHandler;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
function TadaProtocol() {
}
TadaProtocol.prototype = {
scheme: "tada",
protocolFlags: nsIProtocolHandler.URI_DANGEROUS_TO_LOAD,
newURI: function(aSpec, aOriginCharset, aBaseURI) {
let uri = Cc["@mozilla.org/network/simple-uri;1"].createInstance(Ci.nsIURI);
uri.spec = (aBaseURI === null)
? aSpec
: aBaseURI.resolve(aSpec);
return uri;
},
newChannel: function(aURI) {
let
ioService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService),
uri = ioService.newURI("chrome://my-extension/content/about/product.xml", null, null);
return ioService.newChannelFromURI(uri);
},
classDescription: "Sample Protocol Handler",
contractID: "@mozilla.org/network/protocol;1?name=tada",
classID: Components.ID('{1BC90DA3-5450-4FAF-B6FF-F110BB73A5EB}'),
QueryInterface: XPCOMUtils.generateQI([Ci.nsIProtocolHandler])
}
let NSGetFactory = XPCOMUtils.generateNSGetFactory([TadaProtocol]);
Ehh ...これはなんですか? [MDN docs](https://developer.mozilla.org/en/nsIProtocolHandler)でこの属性が見つかりません –
https://developer.mozilla.org/en/nsIChannelを見たいと思っています –