我尝试在 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]);