4

我正在尝试将 Firefox 生成的目录列表替换为自定义列表。

所以,我需要三样东西:

  1. 我需要知道 Firefox 何时尝试加载file://URI。
  2. 我必须测试该 URI 是否针对目录或文件。
  3. 如果 URI 的目标是目录,我必须阻止 Firefox 生成目录列表,而是显示我自己的目录列表。

这是最有问题的第一点:

  • 我阅读了文档,nsIObserverService但它没有做我想要的(有http-on-modify-request但没有file-on-modify-request
  • 我尝试addon-kit/page-modfile://*URI 上使用 Jetpack,但它似乎不允许我在加载我的东西之前验证 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 回答