Monaca(Cordova)を用いてアプリの開発をしているのですが、iOS端末にて下記コードを実行したところ、
以下のログが出力されます。
Androidでは正常に動作するのですが、どのようにすれば解決できますでしょうか?
よろしくお願いいたします。
出力ログ
deviceready has not fired after 5 seconds
Channel not fired: onCordovaReady
Channel not fired: onPluginReady
使用プラグイン
・File (zipの中身のファイルを端末に保存するために使用)
使用ライブラリ
・zip.js (zip解凍に使用)
バージョン
・Fileプラグイン:4.3.3
・cordova : 6.2.0
ソースコード
JavaScript
1//index.js 2var zipUrl = "http://example.com/target.zip": //zipがおかれている場所を示すurl 3const ZIP_EXTRACTION_DIRECTORY = "zip/temp/"; //zipファイル展開先 4 5//端末の準備が完了でき次第、zip解凍を行う。 6ons.ready(function(){ 7 unzipAndExpansion(zipUrl, ZIP_EXTRACTION_DIRECTORY, function () { 8 alert("zip解凍完了!"); 9 } 10 , function () { 11 //zipファイルの解凍に失敗した時の処理。 12 alert("zipファイルの展開に失敗しました"); 13 }); 14});
JavaScript
1//zipExpansion.js 2/** 3 * ZIPファイルをサーバーから取得し、展開します。 4 * @param {string} url...ZIPファイルの格納先 5 * @param {string} pathBase...ZIPファイルの展開先 6 * @param {function} successCallback...成功時のコールバック関数(任意) 7 * @param {function} faildCallback...失敗時のコールバック関数(任意) 8 */ 9function unzipAndExpansion(url, pathBase, successCallback, faildCallback) { 10 //ディレクトリ構成に応じて、適宜変更 11 zip.workerScriptsPath = "lib/zip_js/"; 12 13 if (pathBase.slice(-1) != '/') { 14 pathBase = pathBase + '/'; 15 } 16 17 zip.createReader(new zip.HttpReader(url), function (reader) { 18 reader.getEntries(function (entries) { 19 console.log("go to sendEntry"); 20 sendEntry(entries, entries.length); 21 }); 22 }, function (onerror) { 23 // onerror callback 24 console.log("zip get error."); 25 }); 26 27 function sendEntry(entryArray, target) { 28 if (target <= 0) { 29 //すべてのファイルの作成が完了した。 30 //コールバック関数(任意)を呼び出す 31 if (successCallback != null) { 32 successCallback(); 33 } 34 return; 35 } 36 37 entryArray[target - 1].getData(new zip.BlobWriter(), function (text) { 38 39 var fileName = entryArray[target - 1].filename; 40 var fileContent = text; 41 42 getDirectory(pathBase, function (directoryEntry) { 43 //取得したファイル名からディレクトリ部分を切り取る 44 var fileNameInDir = fileName.substring(0, fileName.lastIndexOf('/')); 45 //取得したファイル名からファイル名部分を切り取る 46 var pathinName = fileName.substring(fileName.lastIndexOf('/') + 1); 47 //ファイル作成メソッド呼び出し 48 createFile(pathBase + fileNameInDir + "/", pathinName, fileContent, function () { 49 var nextTarget = target - 1; 50 //ファイルの作成が完了し次第、次のファイルを作成する。 51 sendEntry(entryArray, nextTarget); 52 }); 53 54 }, function (error) { 55 console.log("get directory error"); 56 if (faildCallback != null) { 57 faildCallback(); 58 } 59 }); 60 }); 61 } 62} 63 64/** 65 * ファイルを新規作成・上書きします。 66 * @param {string} savePath 67 * @param {string} fileName 68 * @param {string} content. 69 */ 70function createFile(saveDirectoryPath, fileName, content, successCallback) { 71 console.log("request file system....(createFile method)"); 72 requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fileSystem) { 73 console.log("get file system....(createFile method)"); 74 //保存場所のディレクトリを作成する 75 getDirectory(saveDirectoryPath, function (directoryEntry) { 76 //ディレクトリが完成し次第、ファイルの作成を行う。 77 directoryEntry.getFile(fileName, { create: true }, function (fileEntry) { 78 fileWriter = fileEntry.createWriter(function (fileWriter) { 79 80 //ファイル書き込み 81 fileWriter.write(content); 82 //ファイルの作成に成功した時のコールバック関数を呼び出す。 83 console.log("file write success : " + fileName); 84 successCallback(); 85 }, function (error) { 86 console.log("file write error"); 87 }); 88 }); 89 }); 90 } 91 , function (error) { 92 //ファイル作成エラー 93 console.log("create file error"); 94 }); 95} 96 97function string_to_buffer(src) { 98 return (new Uint16Array([].map.call(src, function (c) { 99 return c.charCodeAt(0) 100 }))).buffer; 101} 102 103 104/** 105 * ディレクトリを取得または新規作成します。 106 * 成功時のコールバック関数の引数には directoryEntry が入ります。 107 * @param {string} createDirectoryPath…作成するディレクトリのパス 108 * @param {function} successCallback…作成成功時のコールバック関数 109 */ 110function getDirectory(createDirectoryPath, successCallback) { 111 console.log("request file system....(getDirectory method)"); 112 113 //※iOS端末では、ここのrequestFileSystemメソッドのコールバック関数が実行されていない、、、。 114 requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fileSystem) { 115 console.log("get file system....(createFile method)"); 116 117 fileSystem.root.getDirectory(createDirectoryPath, { create: true }, function (directoryEntry) { 118 //この時点で成功した場合は成功時のコールバック関数を呼び出す 119 successCallback(directoryEntry); 120 }, function (error) { 121 //失敗した場合はディレクトリ作成を行う 122 var directoryAry = createDirectoryPath.split('/'); 123 _creteDirectoryInner(directoryAry, -1, 0, successCallback); 124 }) 125 }, function(error) { 126 console.log("request file system error.(get directory method)"); 127 }); 128 129 function _creteDirectoryInner(dirAry, parentIndex, childIndex, successCallback) { 130 131 if (dirAry.length <= childIndex) { 132 //ディレクトリの作成が正常に終了。ファイル作成のためのdirectoryEntryを取得し、コールバック関数を呼び出す。 133 requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fileSystem) { 134 135 //directoryEntryの対象のディレクトリのパスを作成。 136 var createdDirectory = ""; 137 for (var i = 0; i < dirAry.length; i++) { 138 139 if (i > 0) { 140 createdDirectory += "/"; 141 142 } 143 createdDirectory += dirAry[i]; 144 } 145 146 fileSystem.root.getDirectory(createdDirectory, { create: false }, function (directoryEntry) { 147 //directoryEntryが取得でき次第、コールバック関数を呼び出す。 148 successCallback(directoryEntry); 149 }); 150 }); 151 return; 152 } 153 154 requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fileSystem) { 155 //new directory path 156 var newDirectory = ""; 157 if (parentIndex == -1) { 158 newDirectory = dirAry[childIndex]; 159 } else { 160 for (var i = 0; i <= childIndex; i++) { 161 newDirectory += dirAry[i]; 162 if (i != childIndex) { 163 newDirectory += "/"; 164 } 165 } 166 } 167 168 fileSystem.root.getDirectory(newDirectory, { create: true }, function (directoryEntry) { 169 //next dir 170 parentIndex++; 171 childIndex++; 172 _creteDirectoryInner(dirAry, parentIndex, childIndex, successCallback); 173 }, function (error) { 174 //ディレクトリ作成エラー 175 console.log("create directory error"); 176 }); 177 }, function (error) { 178 //ファイルシステムアクセスエラー 179 console.log("file system access error"); 180 }); 181 } 182}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。