Firefox addon 从Firefox sdk文件系统获取javascript文件对象

Firefox addon 从Firefox sdk文件系统获取javascript文件对象,firefox-addon,firefox-addon-sdk,Firefox Addon,Firefox Addon Sdk,我需要以javascript文件对象的形式向服务器发送一个文件。如果我发送二进制数据,它就会显示为已损坏。上周我让它工作了,但最新的firefox更新似乎阻止了脚本的运行 上周有效的代码: function readLocalFiles(file) { return new Promise(function (done, error) { var xhr = new XMLHttpRequest(); xhr.open("GET", 'file:///'

我需要以javascript文件对象的形式向服务器发送一个文件。如果我发送二进制数据,它就会显示为已损坏。上周我让它工作了,但最新的firefox更新似乎阻止了脚本的运行

上周有效的代码:

function readLocalFiles(file) {
    return new Promise(function (done, error) {
        var xhr = new XMLHttpRequest();
        xhr.open("GET", 'file:///' + file.path);
        xhr.responseType = "blob";
        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4) {
                var fileObj = xhr.response;
                fileObj.name = file.name;
                done(fileObj);
            }
        }
        xhr.onerror = function () {
            alert('fudge');
        }
        xhr.send();
    });
}
为了以防万一,我在package.json文件的权限中添加了“file://”。 我在这里也尝试过这个例子: -

我可以使用require(“sdk/io/file”)获取文件的二进制数据,但不知道如何将其转换为文件对象,我在网上看到了一些关于将二进制转换为数组缓冲区并将其作为blob传递的帖子,如:,但这些文件最终被破坏了

此插件仅供内部使用,因此我不担心访问用户本地文件时可能出现的任何安全问题。脚本基本上通过指定的目录循环,获取图像并将其上传到服务器

编辑:


我刚刚发现文件:///调用在使用jpm run时有效,但在编译插件时无效。忽略我下面的评论,仍在尝试解决此问题。

找到了解决方案,但出于安全原因,这不是最好的解决方案

我最初的设置之所以有效,是因为它是在jpm run中运行的,但在编译时它会失败。我猜在jpm运行模式下,它允许本地文件访问,因此为了模拟这种情况,在编译之后,我将firefox设置security.fileuri.strict_origin_policy设置为false


只需要记住在完成后将其放回原位。我还可以尝试更新代码,使用api为我设置打开和关闭此选项。

当XHR文件uri时,readyState始终返回0,但它确实会加载,如图所示-

不确定是否应将其作为答案。但我解决了我的问题。从对象传递到ajax调用的字符串对dir结构使用反斜杠。我用前斜杠代替了它们,解决了这个问题。我只是不明白为什么它上周起作用了,我决定现在就停止。它甚至不会尝试进行ajax调用,所以我认为这是firefox安全问题,使用新的更新停止调用。readyState将返回不同的值,status不会