[英]List all drives Addon SDK (Nodejs/jpm) without require Chrome
我在Windows上,是Firefox Addon SDK
开发中的新手,(目前)我将Firefox Addon SDK
与Node.js
/ jpm
, 但尚未使用Web Extensions
(尚未),也未使用XPCOM
/ XUL
。 好像有些东西混在一起了。
请纠正我,如果我错了,但是截至2016年5月, Web Extensions
无法解析文件系统 (否则,我很高兴能够访问允许访问此文档的文档^^。)而且看来Require chrome
is现在已与XUL
/ XPCOM
一起弃用。 我猜每个人都被迫前进(看起来像)去参加Web扩展( 这超出了本主题的范围),所以我绝不会去Require chrome
因为明年无论如何我都必须放弃它。
那么,如何在Firefox插件SDK中列出驱动器而不导入不推荐使用的库?
我的回答如下,但希望有一个更好的选择。 关于MDN的页面是:
这是我可以使用Addon SDK
(或者如果没有记错的话,最初是jetpack
可以做的,是的,这是一种破解,因为我不知道如何以一种更简洁的方式来做,而且我不想要使用Require Chrome
。
最低版本 :
// index.js or main.js
// declare the io/file API :
var ioFile = require('sdk/io/file');
// array to make attempts :
let drivesIds = ["c", "d", "e", "f", "g", .... "z" ]; // hack isn't it ? :/
for (let i = 0; i < drivesIds.length; i++) {
let driveName = drivesIds[i] + ":\\";
if (ioFile.exists(driveName)) {
console.log(driveName + " is a drive and is ready !");
}
}
完成了! 好的,这很明显,但是我在搜索到的任何地方都找不到该代码,或者没有一个更好的代码(同样,没有require('chrome')
)
扩展版本可以:
getDrives()
,该函数返回驱动器对象的数组,例如{ path: "c:\\\\", hasChildren: true, etc: "etc" }
。 (通过在for
循环中组合ioFile.isFile()
和ioFile.list()
来检查子目录,该循环会在遇到ioFile.list()
中断。 所有这些使您的index.js
文件更轻。 可以适应其他操作系统吗? 我不知道。 标题具有误导性,而这是有关列出带有Addon SDK标签的驱动器的唯一问题。
永远不要尝试构建整个驱动器树,这会使计算机停止运行,并在某处或另一处失败,因为io / file在Windows上的路径长度限制为250-260个字符。
安全问题 ! 这可能就是为什么它没有记载,为什么WebExtensions禁止io操作的原因? 但是 ,我使用它来注入一个不错的Windows资源管理器(选择一个目录以在其中保存您想要的任何内容,以快捷方式另存为或下载对话框)。 这是我使用Firefox的唯一相关原因。 如果io在WE中不够灵活(或缺少),我将回到dotNet并重新设计很多安全漏洞,或者尝试使用Chrome(如果在未来10年内不再使用API)。 事实是,可以自动执行io解析的那一刻,就会出现安全性问题,但是当您不允许这样做时,Addon扩展就不是文件系统可以使用的方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.