Cordova:如何使用 vanilla JS 保存文本文件

Posted

技术标签:

【中文标题】Cordova:如何使用 vanilla JS 保存文本文件【英文标题】:Cordova: How to save text files with vanilla JS 【发布时间】:2020-10-12 21:30:12 【问题描述】:

我要将数组转换为文本文件以发送到不同的设备。我曾尝试使用插件和库来做到这一点,但这似乎对我不起作用。我很高兴找到不使用任何插件或库的this 解决方案。遗憾的是,它在我的浏览器中有效,但在应用程序本身中尝试时似乎无效。

来自网站的代码:

const downloadToFile = (content, filename, contentType) => 
  const a = document.createElement('a');
  const file = new Blob([content], type: contentType);
  
  a.href= URL.createObjectURL(file);
  a.download = filename;
  a.click();

    URL.revokeObjectURL(a.href);
;

document.querySelector('#btn2').addEventListener('click', () => 
  const textArea = 'This is the text that will be in the file'  
  downloadToFile(textArea, 'data.txt', 'text/plain');
);

现在我想知道有没有办法把它变成可以在 android 上运行的东西?

【问题讨论】:

【参考方案1】:

在带有 cordova 的 Android 上,假设您使用数组 (my_array) 作为文件的源

window.resolveLocalFileSystemURL(cordova.file.externalRootDirectory, function (dirEntry) 
        console.log('file system open: ' + dirEntry.name);
        var isAppend = false;
        createFile(dirEntry, nombreFichero, isAppend);
    , onErrorLoadFs);

然后是创建文件的函数:

function createFile(dirEntry, fileName, isAppend) 

var array_file = my_array.join("\n");
dirEntry.getFile(fileName,  create: true, exclusive: false , function (fileEntry) 

    //writeFile(fileEntry, null, isAppend);
    writeFile(fileEntry, array_file, isAppend);

, onErrorCreateFile);

还有一个写入文件的函数:

function writeFile(fileEntry, dataObj, isAppend) 
    fileEntry.createWriter(function (fileWriter) 

        fileWriter.onwriteend = function () 
            console.log("Successful file write..." + fileEntry.name);
        ;

        fileWriter.onerror = function (e) 
            console.log("Failed file read: " + e.toString());
        ;

        fileWriter.write(dataObj);
    );

【讨论】:

感谢您的回复!不幸的是,它似乎对我不起作用。我认为这是由于错误“未定义cordova”,我知道这是因为浏览器没有cordova.js 文件,但它在模拟器中也不起作用。还在 createFile 函数的末尾添加了一个“”。

以上是关于Cordova:如何使用 vanilla JS 保存文本文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Vanilla JavaScript (JS) 中导入/导出类

如何使用 Vanilla Js 拖放存储已放置项目的状态?

如何通过 Protractor 使用 vanilla JS 从 API 获取 json

如何使用特定于浏览器的 vanilla JS 库对依赖项做出反应

如何在 vanilla js 中创建 ApolloClient 订阅

我如何将 vanilla Js 代码转换为 vue js 代码