我已經開始尋找在Chrome中,谷歌http://developer.chrome.com/apps打包應用程序,這似乎是一個偉大的技術,但在早期階段。沒有及時保存在Chrome封裝應用
我的問題是:是否有可能使用從應用程序文件系統API,而不提示保存文件到計算機?我想做一個應用程序,可以保存日誌文件等。
我已經開始尋找在Chrome中,谷歌http://developer.chrome.com/apps打包應用程序,這似乎是一個偉大的技術,但在早期階段。沒有及時保存在Chrome封裝應用
我的問題是:是否有可能使用從應用程序文件系統API,而不提示保存文件到計算機?我想做一個應用程序,可以保存日誌文件等。
我有一些對話與參與打包應用程序開發人員,今天,因爲它是你不能有沒有提醒我們的應用程序沙箱之外訪問文件系統。但它可能會在未來。
但有一個叫做節點的Webkit新項目,這是非常相似的Chrome封裝應用程序,你用HTML,JS等開發你的應用程序在Chrome瀏覽器,也可以運行在瀏覽器的NodeJS。使用這個你可以訪問文件系統和更多的東西。
看看這裏: https://github.com/rogerwang/node-webkit和 https://github.com/rogerwang/node-webkit/wiki
加載和保存文件節點WebKit是很容易的。它看起來像這樣
var gui = require("nw.gui");
var fs = require("fs");
//Save
fs.writeFile('message.txt', 'Hello Node', function (err) {
if (err) throw err;
console.log('It\'s saved!');
});
//Load
fs.readFile('message2.txt', 'utf8', function (err, data) {
if (err) throw err;
console.log(data);
});
種的。您可以保存到應用程序的「工作區」,這意味着該文件將被保存,但用戶或其他應用程序將無法訪問該文件。它將位於沙箱存儲區。要做到這一點,只需使用HTML5 Filesystem API(tutorial here)。
您需要:"permissions": ["storage"]
在你的清單,並在您的JS,你可以這樣做:
var onInitFsCallback=function(fs) {
fs.root.getFile('log.txt', {create: true}, function(fileEntry) {
fileEntry.createWriter(function(fileWriter) {
_this.fileWriter = fileWriter;
fileWriter.onwriteend = onWriteEndCallback;
fileWriter.onerror = onErrorCallback;
fileWriter.write(myBlob);
fileWriter.write(myString);
}, errorHandler);
}, errorHandler);
};
window.webkitRequestFileSystem([window.TEMPORARY or window.PERMANENT], sizeInBytes,
onInitFsCallback, onErrorCallback);
您還可以檢查您的應用程序與檢查工具的文件系統(資源 - >文件系統)。從那裏,你可以下載或刪除文件。在Chrome 24中,您需要在chrome://標誌中啓用開發人員工具實驗,單擊DevTools設置菜單中的實驗並啓用文件系統檢查。
在另一方面,如果你想在任意位置來保存您的應用程序的沙箱外的,是出於安全的需要用戶提示。
看起來你很快就可以做到這一點 - 看到https://groups.google.com/a/chromium.org/forum/#!topic/apps-dev/fu1TyjdYLEc
這是個好消息!感謝分享。 – arpo
感謝我會看看那個。你確定它可以在Packaged App中工作嗎? – arpo
是的,它會的。您需要:' 「權限」: 「存儲」]'在你的清單,並在您的JS使用: 'VAR onInitFs =功能(FS){ fs.root.getFile( 'log.txt的',{創建:真},函數(FileEntry的){ fileEntry.createWriter(函數(的FileWriter){ fileWriter.onwriteend = onWriteEndCallback; fileWriter.onerror = onErrorCallback; fileWriter.write(...); }的ErrorHandler); },errorHandler); }; (window.TEMPORARY或window.PERMANENT],sizeInBytes,onInitFsCallback,onErrorCallback); ' – mangini
(抱歉評論中的格式不正確,請將其添加到答案中) – mangini