2

我正在使用 JavaScript 制作 iPhone 应用程序。我想打开一个文件作为结果文件,我需要从 javascript 编写一些结果日志和数据。使用 iphone,我使用 filesDirectory 打开文件并进行读/写操作。但现在我想在 javascript 中执行此操作。现在我如何使用这个文档目录来编写文件并稍后从 Xcode 访问它。有什么建议么?

谢谢阿坎莎

我正在使用以下 youtube api 代码。我制作了一个名为 youtubeAPI.html 的文件,并从 Objective-C 代码中调用了该文件。它成功打开页面。现在我想打开一个文件并在每次更改状态时写入内容,然后需要在 obejective-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

我已经在 PhoneGap 中编写了文件,但从未从目标 c 访问过它。但我很确定,无论是用 JS 还是 Obj-C 编写的任何文件都写在文档目录中。如需帮助,您可以查看这些链接PhoneGap file writingW3 File api。PhoneGap 中的示例很容易理解,我认为它应该可以工作,因为它使用了 W3 JS 文件 api。

于 2012-04-16T06:39:07.567 回答
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 回答