如何通过URI引用外部二进制文件
How to reference an external binary by URI?
我有一个Thunderbird扩展,它使用外部可执行文件对消息体进行变异。目前,我做了一项破解工作,只需将此可执行文件放在/tmp/someBinary
中,然后这样调用它:
var exe = FileUtils.File("/tmp/someBinary");
var proc = Components.classes["@mozilla.org/process/util;1"]
.createInstance(Components.interfaces.nsIProcess);
proc.init(exe);
var args = [msgBody.path];
proc.run(true, args, args.length);
这显然是愚蠢的,最好通过URI调用它,并将可执行文件与应用程序捆绑在一起。遗憾的是,我有限的JS意味着我只想到了以下内容:
var URL = ios.newURI("chrome://myExtension/content/someBinary",null,null);
var exe = URL.QueryInterface(Components.interfaces.nsIFileURL).file;
但这并不完全正确。有正常的方法来完成这件事吗?
您需要询问chrome注册表中的URL解析为什么:
var chromeRegistry = Components.classes["@mozilla.org/chrome/chrome-registry;1"]
.getService(Components.interfaces.nsIChromeRegistry);
var URL = ios.newURI("chrome://myExtension/content/someBinary", null, null);
URL = chromeRegistry.convertChromeURL(URL);
var exe = null;
if (URL instanceof Components.interfaces.nsIFileURL)
exe = URL.file;
请注意,chrome://
URL不一定会解析为file://
URL。通常情况下,扩展插件是作为打包的XPI文件安装的,并且只会获得指向该归档中文件的链接,而不是操作系统可以执行的链接。因此,您需要在install.rdf
文件中指定<em:unpack>
标志。
这种方法很简单,但会降低启动性能(出于某种原因,扩展管理器默认情况下不会解压缩扩展)。因此,更好的解决方案可能是在第一次需要时将可执行文件复制到临时目录中
相关文章:
- 如何将PDF作为二进制文件传递到window.open()
- 我的外部js文件无法加载
- 关于引入外部javascript文件的问题&css通过https
- 有没有办法在tinymceiframe中加载一个外部javascript文件
- 如何在定义js文件后为外部javascript文件设置变量
- ResolveUrl没有'我似乎不适合当链接到具有动态虚拟目录的外部javascript文件时
- 如何在Windows中将Javascript文件编译成二进制文件
- 在Internet Explorer中从二进制文件打开PDF
- 如何从Node Webkit应用程序中退出外部CMD文件
- 如何使用JavaScript粘贴原始二进制文件而不出现“无效字符”错误
- AJAX在Django的外部JS文件中发布
- jqueryajax调用是复制url,当在模态视图之后在外部js文件中进行调用时
- Javascript:获取“;FORM”;它是在.html到外部.js文件中创建的
- 如何在外部js文件中实现谷歌地图api3
- 外部JS文件可以'不得执行
- Jade-包含来自外部js文件的var
- IE 9 BHO插件.加载外部JS文件时出现错误SCRIPT1014
- InternetExplorer:外部文本文件只能使用二进制格式
- 如何通过URI引用外部二进制文件
- 如何将二进制文件从 Meteor 上传到外部 API