0

Android および iOS 用の PhoneGap アプリケーションを作成しようとしています。

これまでのところ、Android 2.2 以降で LocalFileSystem にアクセスできる程度に成功しています。

iOS (5 および 6) では、残念ながらそのような運はありませんでした。

FileReaderFileWriterの例も同様に機能しません。

私はjsconsole.comを使用してこれをデバッグするのに時間を費やしました。ファイルシステムに問題がある理由を説明します。

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

私はついにこの問題を解決しました。

Android から iOS プロジェクトに転送する共通の「www」フォルダーがありました。

www フォルダー全体を素朴に上書きしましたが、これが問題の原因となっています。

www フォルダーのルートにある cordova.js ファイルはプラットフォーム固有であり、iOS プロジェクトで Android の cordova.js ファイルを使用していましたが、明らかに機能していませんでした。

正しい方向に向けてくれた #phonegap の fmertz に感謝します。

于 2013-01-10T09:50:26.233 に答える