小编典典

JavaScript / Ajax写入文件

ajax

我知道这个问题经常被问到,但是区别是我已禁用网络安全。我正在创建一个永远不会在任何地方托管的webapp,以访问用户运行,chrome --disable-web-security --user-data-dir [webappdirectoryhere]
我了解这是多么的非常规,但这仅适用于小型项目。

我正在使用此Ajax访问本地文件(除非您正在运行服务器,或者像我一样禁用Web安全,否则这在chrome中不起作用):

function loadDoc(){
    $.ajax({url: "ajax_info.txt", success: function(result){
        var variablesArray = result.split(" ");
}});
}

所以我的问题是-除了写以外,我还能做类似的事情吗?

编辑:所以我真正想要的是一个做该ajax逆函数的函数。并编写类似(variable1 +“” + variable2)的注:我要覆盖,而不是追加。


阅读 545

收藏
2020-07-26

共1个答案

小编典典

由于您说过您不打算在任何地方托管它,因此您可以将代码移至打包的应用程序中。从那里可以使用chrome.fileSystem
api。

使用choiceEntry()来询问用户他们希望应用程序能够读取/写入的目录。在回调中,检查返回的条目是否有效,然后将其存储以备后用。

var userDir = null;
chrome.fileSystem.chooseEntry({type: 'openDirectory'}, function(theEntry) {
   //do sanity check(s) and store it
   if(!theEntry.isDirectory) {
      //report error
      return;
   }
   userDir = theEntry;
});

一旦你有一个目录条目参考比你可以使用的GetFile()得到一个文件的引用,创建它,如果它不存在,这同样适用于创建子目录刚刚替补getFilegetDirectory。然后使用createWriter()获取FileWriter实例以写入该文件。

function saveData(filename,data){
   if(!userDir) {
      //report error
      return;
   }

   userDir.getFile(filename, {create: true}, function(fileEntry) {
      if(!fileEntry || !fileEntry.isFile){
         //report error
         return;
      }

      fileEntry.createWriter(function(fileWriter) {
         fileWriter.onwriteend = function(e) {
            //report success
         };
         fileWriter.onerror = function(e) {
            //report error: e.toString()
         };

         //Create a Blob from the data and write it.
         var blob = new Blob([data], {type: 'text/plain'});
         fileWriter.write(blob);
      });
   });
}

//at some point after user has selected directory
saveData("log.txt","Some data");

检查各种文档以了解错误报告和其他必要性。

如果只想询问用户一次目录,请使用keepEntry()保存目录条目的ID。并使用restoreEntry()获取目录的引用。从那里开始,只需执行saveData函数中的步骤即可。检查文档以了解其他过程,例如读取文件。

2020-07-26