gpt4 book ai didi

javascript - 在 Cordova/PhoneGap 中的客户端文件中打开/保存客户端数据

转载 作者:行者123 更新时间:2023-11-28 18:44:33 24 4
gpt4 key购买 nike

我知道我可能会使用 Cordova File plugin ,但由于其低级性质,这似乎有多个特定于平台的怪癖(例如不同的目录结构)。

今天我发现了this answer显示了如何打开桌面浏览器的“保存”对话框,供用户选择要保存 blob 数据的位置,但它是 代码,所以我将这个想法转换为纯 JavaScript:

function onSaveButtonClick() {
var blob = new Blob(['abcd'], {type: 'text/plain'}),
blobUrl = window.URL.createObjectURL(blob),
a = document.createElement('a');

document.getElementsByTagName('body')[0].appendChild(a);
a.href = blobUrl;
a.download = "file.name";
a.click();
a.innerHTML = blobUrl;
window.setTimeout(function() {
window.URL.revokeObjectURL(blobUrl);
}, 1000);
}

CodePen here

(另请注意,download<a> 属性是 not supported by IE, but Edge,除此之外,IE 似乎会阻止 a.click() 调用。)

在上面的代码中,设置 innerHTML仅用于调试目的和生产用途,您可能需要设置 a.style.display = 'none'完全隐藏 anchor 。我还知道revokeObjectURL超时调用有点代码味道,但它似乎可以在桌面 Chrome 和 Firefox 中工作。

现在的问题是:如何在 Cordova 应用程序中实现相同的目标?我的意思是,让用户通过库存另存为对话框选择文件保存位置,这样我就不必向我的应用程序添加特定于平台的代码?在 Android 上的 Cordova 应用程序中运行此代码只会显示 anchor ,但不会要求用户保存文件 - 即使手动单击链接(在超时之前或之后)也不会显示它。

更新:

这里有一个相关问题:

How to make Phonegap's (Cordova) File API work like File API in normal browser

唯一的答案要求用户安装一个单独的(尽管免费)应用程序,因此这是不行的,因为我希望我的应用程序是独立的。

最佳答案

   // Lets save a sample json data....

function SaveData(fileName, Data) {
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem) {
fileSystem.root.getFile(fileName, {
create: true,
exclusive: false
}, function(fileEntry) {
fileEntry.createWriter(function(writer) {
writer.onwriteend = function() {
alert("Data Saved");
};
writer.write(JSON.stringify(Data)); // if data type is not json use writer.write(Data);
}, onError);
}, onError);
}, onError);
}

function onError() {
alert("Error");
}

// function to create a directory if necessary
function CreateDirectory(DirName) {
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function gotFS(fileSystem) {
fileSystem.root.getDirectory(DirName, {
create: true
}, function gotDir(dirEntry) {});
}, function fail() {});
}


// Create Directory
CreateDirectory("My Folder");

var fileName = 'SavedFile.json'; // or file name and path e.g My Folder/SavedFile.json

// json data
var Data = '{ "id": "5001", "type": "None" },{ "id": "5002", "type": "Glazed" },{ "id": "5005", "type": "Sugar" }';

// Save Data
SaveData(fileName, Data);

关于javascript - 在 Cordova/PhoneGap 中的客户端文件中打开/保存客户端数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35592024/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com