4

Firefox によって生成されたディレクトリ リストをカスタムのものに置き換えようとしています。

したがって、次の 3 つのものが必要です。

  1. file://Firefox がいつURIを読み込もうとするかを知る必要があります。
  2. その URI がディレクトリまたはファイルを対象としているかどうかをテストする必要があります。
  3. URI のターゲットがディレクトリの場合、Firefox がディレクトリ リストを生成しないようにし、代わりに自分のディレクトリ リストを表示する必要があります。

これは、最も問題のある最初のポイントです。

  • のドキュメントを読みましたnsIObserverServiceが、必要なことが行われません ( はありますが、ありhttp-on-modify-requestませんfile-on-modify-request)
  • URI でJetpack を使用しようとしましたが、自分のものをロードする前addon-kit/page-modfile://*URI がディレクトリを対象としているかどうかを確認できないようです。
  • のドキュメントを読みましたが、nsIFileProtocolHandler役に立ちません。

file://*では、どうすればリクエストを傍受できますか?

誰かがアイデアを持っていますか?

4

1 に答える 1

5

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]);
于 2012-08-07T13:04:01.033 に答える