file://* URI で Jetpack の addon-kit/page-mod を使用しようとしましたが、自分のものをロードする前に URI がディレクトリをターゲットにしているかどうかを確認できないようです。
それは正しい。ただし、page-mod
モジュールが行っているのと同じこと、つまりdocument-element-inserted
オブザーバーの通知をリッスンすることができます。これらの行に沿ったもの:
var events = require("sdk/system/events");
var urls = require("sdk/url");
events.on("document-element-inserted", function(event)
{
var window = event.subject.defaultView;
if (!window) // XBL document?
return;
var url = urls.URL(window.document.URL);
if (url.scheme == "file")
{
// A file:/// URL was loaded, do something with this window
}
});
参考までに:system/events
モジュール、url
モジュール。
その URI がディレクトリまたはファイルを対象としているかどうかをテストする必要があります。
url
モジュールを使用すると、ファイル パスを取得することもでき、モジュールを使用してio/file
アクセスできます。
var files = require("sdk/io/file");
var path = urls.toFileName(url);
var isDir = files.exists(path) && !files.isFile(path);
URI のターゲットがディレクトリの場合、Firefox がディレクトリ リストを生成しないようにし、代わりに独自のディレクトリ リストを表示する必要があります。
それが難しい部分です。Firefox がディレクトリ リストを生成するのを防ぐことはできないと思いますが、呼び出しwindow.stop()
ても同じ効果があるはずです。その後、独自のコンテンツをウィンドウに動的に追加できます。メソッドを使用files.list(path)
して、ディレクトリ エントリのリストを取得できます。
window.stop();
var entries = files.list(path);
for (var i = 0; i < entries.length; i++)
addEntry(window, path, entries[i]);