RequestFileSystem未定义iOS上的PhoneGap / Cordova 2.2.0

时间:2013-01-07 15:12:37

标签: ios cordova

我正在尝试为Android和iOS创建一个PhoneGap应用程序。

到目前为止,我已经成功地在Android 2.2及更高版本上访问了LocalFileSystem。

在iOS(5和6)上,遗憾的是我没有这样的运气。

FileReaderFileWriter示例也无效。

我花了一些时间使用jsconsole.com调试它,据我所知,window.requestFileSystem和window.webkitRequestFileSystem都是未定义的。 这可以解释为什么我的文件系统有问题。

我正在使用Cordova 2.2.0和XCode 4.5作为iOS部分。

示例和我自己的代码都在Android上运行。

如果你们有任何建议,我会非常感谢它对我的心理健康产生的积极影响!

编辑:
index.html

 <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <meta name="format-detection" content="telephone=no" />
        <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" />
        <title>Hello World</title>
    </head>
    <body>
        <div class="app">
          <a href="javascript:myfs.clicked()">click!</a>

        </div>
        <script type="text/javascript" src="cordova-2.2.0.js"></script>
        <script type="text/javascript" src="js/jquery-1.8.2.min.js"></script>
    <script src="http://jsconsole.com/remote.js?secret-debug-key"></script>

        <script type="text/javascript" src="js/filesystem.js"></script>
        <script type="text/javascript">
          var myfs;
          document.addEventListener('deviceready', function() {
          myfs = new FS();
          myfs.initializeFileSystem();

});


        </script>
    </body>
</html>

filesystem.js

var FS = (function() 
          {
              var self = {};

              self.initializeFileSystem = function() 
              {
                  window.requestFileSystem = window.webkitRequestFileSystem || window.requestFileSystem;
                  window.requestFileSystem(1, 0, self.gotFS, self.fail);
              };
              self.gotFS = function (fileSystem)
              {
                  window.rootFS = fileSystem.root;
                  //create our cache directory if it does not exist
                  var entry = fileSystem.root;
                  entry.getDirectory("tempdirectory", {create: true, exclusive: false}, function() {console.log("directory already present or created");}, function(error) {console.log("Error creating directory " + error.code);});                  

              };

              self.fail = function()
              {
                  console.log("requestFileSystem failed");
              };

              self.downloadImage = function(url, fileName, callback)
              {
                  var ft = new FileTransfer();
                  var filename = fileName;
                  var callback = callback;
                  ft.download(
                      url,
                      window.rootFS.fullPath + "/" + filename,
                      function(entry)
                      {
                          if(callback!= undefined)
                          {
                              callback(entry);
                          }
                      },
                      function(error)
                      {
                          console.log("download error: " + error.code);
                      }
                  );
              };

              self.clicked = function()
              {
                  //random test URL
                  var url = "http://www.embeddedpeople.dk/_/rsrc/1301663383918/home/ydelser/konsulentydelser/test/test.png?height=400&width=350";
                  self.downloadImage(url, "test.png", function(){console.log("download succesful");$('body').append('<img src="file:///data/data/dk.attention8.filesystem/test.png" />');});
                  return false;
              };
              return self;

          }

         );

这适用于Android,点击完成后,文件被下载,并且应该在DOM中插入包含对下载图像路径的引用的img标记。 我知道这条路径在iOS上无效,也没有SD卡设备上的正确路径,但是在添加img标签之前就出现了问题。
此图片应显示javascript代码在Android中运行(取自Android模拟器)。 Screenshot

如果您需要进一步澄清或有疑问,我会尽快提供 谢谢你的时间!

1 个答案:

答案 0 :(得分:0)

我终于解决了这个问题。

我有一个常见的“www”文件夹,我将从我的Android转移到我的iOS项目。

我天真地覆盖了整个www文件夹,这导致了问题。

www文件夹根目录中的cordova.js文件是特定于平台的,因此我在iOS项目中使用了Android cordova.js文件,这显然无效。

感谢fmertz对#phonegap指出了我正确的方向。