Firefox从附加组件打开文件而不是本地路径

时间:2015-01-31 08:22:54

标签: javascript firefox-addon-sdk

我正在创建运行特定.bat文件的Firefox附加组件。

这是我用的代码。

main.js

const {Components, Cc, Ci,Cu} = require("chrome");

var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
file.initWithPath("C:\\Users\\Madhawa.se\\Desktop\\snap\\shoot.bat"); // i want to open this bat from xpi .for example from data directory
var args="this is an argument  ";
var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
process.init(file);
process.run(false, args, args.length);

它运行正常,但我想从加载项内部打开shoot.bat文件,这样我就可以轻松地将加载项作为单个xpi分发。

如何从附加组件中打开此bat文件,例如我可以将shoot.bat文件放在我的Firefox附加组件的data directory内,但是如何打开它?不可能吗?有没有更好的方法来实现这个目标?

1 个答案:

答案 0 :(得分:4)

虽然从附加XPI中读取数据相当容易,但是无法以这种方式创建进程。 Windows,特别是Windows可执行加载程序,不知道如何阅读.xpi

执行批处理文件或其内容可能是通过在执行前在磁盘上的某处写入批处理文件,或者使用该批处理的内容组装cmd /K兼容的参数字符串来实现的。文件

首先读取批处理文件可以实现,例如将request模块与data.url()一起使用。

const {Request} = require("sdk/request");
const {data} = require("sdk/self");

Request({url: data.url("shoot.bat"), onComplete: function(response) {
  var batch = response.text;
  // ...
}});

当然,将批处理文件的内容放在Javascript源代码本身可能更容易,以完全避免使用Request内容。

现在,您可以将批处理文件内容写入文件,例如使用io/file和/或OS.File(后者目前是首选,主要是因为io/file不是异步),并执行该操作。

或者您可以正确格式化与cmd /K一起使用的内容。