2

JavaScriptを使ってiPhoneアプリを作っています。ファイルを結果ファイルとして開きたいのですが、JavaScript からいくつかの結果ログとデータを書き込む必要があります。iphone では、documentsDirectory を使用してファイルを開き、読み取り/書き込み操作を行っていました。しかし今、私はこれをjavascriptでやりたいと思っています。この documentsDirectory を使用してファイルを作成し、後で Xcode からアクセスするにはどうすればよいでしょうか。助言がありますか?

ありがとうあかんしゃ

次のYouTube APIコードを使用しています。youtubeAPI.html というファイルを作成し、このファイルを Objective-C コードから呼び出しています。ページが正常に開きます。今、私はファイルを開いて、それが状態を変更するたびに何かを書きたいと思っています。そして、objective-c からの最終結果でそのファイルを表示する必要があります。どうすればこれができるか教えてください。

<!DOCTYPE HTML>
<html>
<body>
<div id="player"></div>
<script>
    //Load player api asynchronously.
    var tag = document.createElement('script');
    tag.src = "http://www.youtube.com/player_api";
    var firstScriptTag = document.getElementsByTagName('script')[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
    var done = false;
    var player;
    function onYouTubePlayerAPIReady() {
        player = new YT.Player('player', {
          height: '390',
          width: '640',
          videoId: 'JW5meKfy3fY',
          events: {
            'onReady': onPlayerReady,
            'onStateChange': onPlayerStateChange
          }
        });
    }
    function onPlayerReady(evt) {
        evt.target.playVideo();
    }
    function onPlayerStateChange(evt) {
        if (evt.data == YT.PlayerState.PLAYING && !done) { // NEED TO ADD FILE OPERATION HERE
            setTimeout(stopVideo, 6000);
            done = true;
        }
    }
    function stopVideo() {
        player.stopVideo();
    }
</script>
</body>
</html>
4

2 に答える 2

0

これは、私のために機能するファイルシステムを読み書きするために書いたコードです。fileWriter はファイルへの絶対パスを返しますが、ファイル リーダーは相対パスを必要とするため、一番下に getRelativePathToFile メソッドがあることに注意してください。

function onPlayerStateChange(evt) {
 if (evt.data == YT.PlayerState.PLAYING && !done) { // NEED TO ADD FILE OPERATION HERE

 PG.saveToDisk('youTubeStateChange.txt', 'on player state change', 
  function (pathToFile){
   alert('file written to ' + pathToFile);
  }
 ); 

 setTimeout(stopVideo, 6000);
   done = true;
 }
}

// make error codes meaningful
PG.FileErrors = {
 1:     'File not found',
 2:     'Security error',
 3:     'Action Aborted',
 4:     'File not readable',
 5:     'Encoding error',
 6:     'No modification allowed',
 7:     'Invalid state error',
 8:     'Syntax error',
 9:     'Invalid modification error',
 10:    'Quota Exceeded',
 11:    'Type mismatch',
 12:    'Path exists' 
};

// writes a file to the fileSystem 
// and sets the path to the file
// which can be used in the callback
// @param {} fileContent  
// @param {string} fileName  
// @param {function} callback
PG.saveToDisk = function (fileContent, fileName, callback){
 var    pathToFile, 
    accessFileSystem = window.requestFileSystem; 

 // something went wrong..
 function fail (error){
  console.log('-- saveToDisk: error ' + error + ' '  + PG.FileErrors[error.code]); 
 }



// finally write to a file
 function gotFileWriter (writer){
  console.log('-- saveToDisk: gotFileWriter');

  // ..yaay! it worked
  writer.onwrite = function (event){
   if(typeof callback == 'function'){
    console.log('-- saveToDisk: calling back');

    callback.call(this, pathToFile);
   }
  }; 

  // working it..
  writer.write(fileContent);

  delete gotFileWriter;
 }

 // now that we have a location
 // on disk we can write to it..
 function gotFileEntry (fileEntry){
  console.log('-- saveToDisk: gotFileEntry');

  pathToFile = fileEntry.toURI();

  // ..not quite 
  fileEntry.createWriter(gotFileWriter, fail);

  delete gotFileEntry;
 }

 // get file for writing
 function getFileSystem (fileSystem){
  console.log('-- saveToDisk: getFileSystem');

  fileSystem.root.getFile(fileName, {create: true, exclusive: false}, gotFileEntry, fail);

  delete getFileSystem;
 }


 if(typeof accessFileSystem != 'undefined'){
  console.log('-- saveToDisk: accessed file system');

  accessFileSystem(LocalFileSystem.PERSISTENT, 0, getFileSystem, fail);

  // clean up as we go to save space in
  // call stack and prevent 'call stack
  // size exceeded' error
  delete accessFileSystem;
 } else {
  console.log('-- saveToDisk: no requestFileSystem so exiting');
 }

};

// get a file at a source from
// disk and pass it to callback
// @param {function} callback
PG.getFromDisk = function (source, callback){
 var    accessFileSystem = window.requestFileSystem;

 // something went wrong..
 function fail (error){
  console.log('-- getFromDisk: error ' + PG.FileErrors[error.code]); 
 }

 //we read it
 // @param {string} method
 //  defaults to text unless image is specified
 function readData (file, method){
  console.log('readDataUrl');

  var   reader = new FileReader(),
    method = method == 'image' ? 'readAsDataURL' : 'readAsText';

  reader.onloadend = function (event){
   if(typeof callback == 'function'){
    console.log('-- getFromDisk: calling back');

    callback.call(this, event.target.result); 
   }
  };

  reader[method](file);
 }

 // what do we do with the file?
 function gotFile (file){
  console.log('-- gotFile');

  readData(file);
 }

 // get the file
 function gotFileEntry (fileEntry){
  console.log('-- gotFileEntry');

  fileEntry.file(gotFile, fail);
 }

 // get file reader
 function getFileSystem (fileSystem){  
  console.log('-- getFileSystem: ' + source);

  fileSystem.root.getFile(source, null, gotFileEntry, fail);
 }

  // why did the fileSystem cross the road?
  // so it could callback 4 times!
 if(typeof accessFileSystem != 'undefined'){
  accessFileSystem(LocalFileSystem.PERSISTENT, 0, getFileSystem, fail);
 } else {
  console.log('-- getFromDisk: no requestFileSystem so exiting');
 }

};

// get relative path to saved file
// because that is what the file 
// reader needs
// @param {string} pathToFile
PG.getRelativePathToFile = function (pathToFile){
 if(/localhost|mnt/.exec(pathToFile)){  
  var root = /localhost|mnt/.exec(pathToFile)[0];

  pathToFile = pathToFile.substring(pathToFile.indexOf(root));
  pathToFile = pathToFile.substring(pathToFile.indexOf('/'));
 }

 console.log('-- getRelativePathToFile: pathToFile = ' + pathToFile);

 return pathToFile; 
};
于 2012-04-16T07:03:49.870 に答える
0

私は PhoneGap にファイルを書きましたが、目標 c からアクセスしたことはありません。しかし、JS または Obj-C のいずれで記述されたファイルも、ドキュメント ディレクトリに記述されていると確信しています。ヘルプについては、これらのリンクPhoneGap file writingおよびW3 File apiを確認してください。PhoneGap の例は分かりやすく、W3 JS ファイル API を使用しているのでうまくいくと思います。

于 2012-04-16T06:39:07.567 に答える