我正在使用JavaScript制作iPhone应用程序。我想打开一个文件作为结果文件,我需要从javascript写一些结果日志和数据。使用iphone,我使用documentsDirectory打开文件并进行读/写操作。但现在我想在javascript中这样做。现在我如何使用这个documentsDirectory来编写一个文件,稍后从Xcode访问它。 有什么建议吗?
由于 Akansha
我正在使用以下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>
答案 0 :(得分:0)
我在PhoneGap中写过文件但从未从目标c访问过它。 但我非常确定无论是在JS还是Obj-C中编写的任何文件都是在文档目录中编写的。 如需帮助,您可以查看这些链接PhoneGap file writing和W3 File api。 PhoneGap中的示例很容易理解,我认为它应该工作,因为它使用W3 JS文件api。
答案 1 :(得分: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;
};