无法在Android混合应用程序中保存javascript中的文件(英特尔XDK人行横道构建)

时间:2014-02-28 10:26:23

标签: javascript android cordova intel-xdk crosswalk-runtime

我正在使用intel XDK为Android平台开发javascript应用程序来构建apk文件。我正在使用 Crosswalk for android build ,选中 基于W3C File API读取,编写和导航文件系统层次结构的API 选项。我可以轻松打开文件,但无法将其保存到设备中。

为了保存,我确实使用了以下代码(该代码适用于桌面Chrome浏览器):

<html>
<head>
<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
</head>
<body>
    <img id="img"/>

<script>
    saveImg = function (img, fileName) {
        var a = document.createElement('a');
        a.setAttribute('href', img.src);
        a.setAttribute("download", fileName);
        document.body.appendChild(a);
        a.click();
        document.body.removeChild(a);
    };

    $(document).ready(function () {
        var img = document.getElementById('img');
        img.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAASUlEQVRo3u3PAQ0AIAwDsIGC+TcLLkhOWgddSU6G a5udT4iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi8cQEjUgGTmE6z3QAAAABJRU5ErkJggg==";
        img.onload = onload;
        function onload(){
            saveImg(img, 'savedImg');
        };
    });
</script>
</body>
</html>

我的Android设备写:完成下载文件,并在下载文件夹中显示文件:png;base64,iVBORw0KGgoAAAA...6z3QAAAABJRU5ErkJggg==.bin。文件大小是0KB,我还注意到文件的名称正是我试图保存的img的base64 interpritation。

如何解决此问题并能够保存文件?

2 个答案:

答案 0 :(得分:2)

Crosswalk是一个Web运行时,它不像其他浏览器那样提供下载管理器UI,它不应该是运行时的目标。当用户点击下载的链接时,Crosswalk会生成Android的选定下载管理器,它将启动下载管理器或默认浏览器来下载资源。

如果Web开发人员想要下载文件并将其保存到设备(本机文件系统),我认为Cordova下载api应该是一个很好的选择。 请参阅:https://cordova.apache.org/docs/en/3.0.0/cordova_file_file.md.html#FileTransfer 它符合您的要求吗?

答案 1 :(得分:1)

Crosswalk正在计划支持原生文件系统,也许它将登陆Crosswalk 6,我不确定具体日期。 在支持本机文件系统之后,Web开发人员可以使用XmlHttpRequest API直接通过Crosswalk文件系统API而不是Cordova下载API将文件下载到设备(本机文件系统)。