0

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

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

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

FileReaderFileWriter示例也无法正常工作。

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

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

示例和我自己的代码都在 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>

文件系统.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,点击后,文件被下载,并且包含对下载图像路径的引用的 img 标签应该插入到 DOM 中。我知道此路径在 iOS 上无效,在带有 SD 卡的设备上也不正确,但在添加此 img 标签之前就出现了问题。
此图像应显示 javascript 代码在 Android 中工作(取自 Android Emulator)。 截屏

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

4

1 回答 1

0

我终于解决了这个问题。

我有一个通用的“www”文件夹,可以从我的 Android 转移到我的 iOS 项目。

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

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

感谢 #phonegap 上的 fmertz 为我指明了正确的方向。

于 2013-01-10T09:50:26.233 回答