繁体   English   中英

列出所有不需要Chrome的驱动器Addon SDK(Nodejs / jpm)

[英]List all drives Addon SDK (Nodejs/jpm) without require Chrome

这是关于列出驱动器唯一 SO问题吗?

我在Windows上,是Firefox Addon SDK开发中的新手,(目前)我将Firefox Addon SDKNode.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()中断。
  • 通过导出实现将代码移植到另一个插件模块
  • 甚至将io函数和属性封装为模块中全局对象的成员(您可以监视文件系统更改,例如拔出的dir,将文件系统树存储在内存中等)

所有这些使您的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM