Javascript初心者です。Monacaにてアプリを開発しています。
スマホ内に保存した画像ファイルを画面に表示させるために、画像URLをBLOB形式に変換し、変数「texthtml」へ追加しようとしているのですが上手くいきません。
下記のソースコードでは、変数「texthtml」内は空白になってしまいます。
関数「urledit」で行われているファイル操作の処理が「非同期」で行われているらしい事は分かっているのですが、具体的にどこを修正すれば良いのか分からずに困っています。
該当のソースコード
Javascript
1var imgn; //グローバル変数「imgn」 2 3function createFile(dirEntry, fileData, fileName) { 4(略) 5 textArray = '<div class="shop01-p" style="background-image:url(KmEsb001-shop01.png);"></div>'; //ここでは1行だけにしていますが、実際の「textArray」は複数の行数があります。 6 var texthtml = ''; 7 for (var i = 0; i < textArray.length; i++){ 8 if (textArray[i].match(/shop01-p/)) { 9 var result = textArray[i].split(/(|)/); 10 11 urledit(result[0],result[1],result[2]); 12 //関数「urledit」から変数「imgn」を持ってきたい。 13 //関数「urledit」でグローバル変数「imgn」を編集している。 14 15 console.log( imgn ); //undefined 16 texthtml += imgn; 17 }else{ 18 texthtml += textArray[i]; 19 } 20 } 21(略) 22} 23 24function urledit(R0,R1,R2){ 25 requestFileSystem(LocalFileSystem.PERSISTENT, 0, 26 function(fileSystem){ 27 var dirEntry = fileSystem.root; 28 var gUrl = dirEntry.toURL() + R1; 29 console.log('data:' + gUrl ); 30 window.resolveLocalFileSystemURL(gUrl, 31 function(fileEntry){ 32 fileEntry.file(function (file) { 33 var reader = new FileReader(); 34 reader.onloadend = function() { 35 var ifn = fileEntry.toURL(); 36 if (ifn.match(/.png/)) { 37 var blob = new Blob([new Uint8Array(this.result)], { type: "image/png" }); 38 }else{ 39 var blob = new Blob([new Uint8Array(this.result)], { type: 'image/jpeg' }); 40 } 41 var urlurlurl = window.URL.createObjectURL(blob); 42 imgn = R0 + '(' + urlurlurl + ')' + R2; //この変数「imgn」を関数「createFile」に渡したい。 43 console.log( imgn ); //imgn='<div class="shop01-p" style="background-image:url(blob:file:///7490f2c1-52b1-44c2-a015-91508e1a3c3b);"></div>' 44 return(imgn); 45 }; 46 reader.readAsArrayBuffer(file); 47 }); 48 } 49 ); 50 }); 51}
基本的な部分で躓いているような気がするのですが、皆様のお力をお借りしたく存じます。
よろしくお願いします。