ある制限のある環境下で以下の制作をしています。ほかの言語だと楽だとは思うのですが・・・。
・Htmlでjavascriptを使用しながらファイルを作成
→同じ階層のcsvファイルからランダムにセルを表示させるスクリプト
・nwjs(node-webkit)を利用し実行ファイル形式にパッケージング
・Enigmaで単体実行ファイルにまとめる (この場合1.exeと仮にします)
この際、主となるindex.htmlとsample.csvは同一階層に存在し、その場合上記手順を実行しても問題なく動きます。
やりたいこととしては、
・1.exeと同階層にsample.csvを置きユーザーが自由にcsvを編集して使えるようにしたい。
と思い、csvファイルをhtmlファイルの上階層に指定(../や../../など)にしてみましたが、パッケージにすると動きません。
※var data = csvToArray("../sample.csv"); など。
1階層上から5階層上まで試しましたが動きません。そもそもそういった手順では無理なのか・・・。
上記手順を踏んだ場合、exeにすると何階層上になるのか、どのような記述をすべきなのか、解決方法をご教示ください。または代替案があれば教えていただけるとありがたいです。
sample.csvはExcelでいうA列に1から順の連番、B列に表示させたい項目(この場合掛け算九九を入れてみました)が入っているものです。
html
1<!doctype html> 2<html> 3<head> 4<meta charset="utf-8"> 5<title>フラッシュカード</title> 6<style type="text/css"> 7#aaaa{ 8 color:white; 9 text-align:center; 10 background-color:black; 11 font-size: 500px; 12} 13a.cp_btn { 14display: block; 15width: 160px; 16padding: 0.8em; 17text-align: center; 18text-decoration: none; 19color: #EC407A; 20border: 2px solid #EC407A; 21border-radius: 3px; 22transition: .4s; 23} 24a.cp_btn:hover { 25background: #EC407A; 26color: #fff; 27} 28</style> 29</head> 30<body> 31<a class="cp_btn" onclick="startfnc()">スタート</a><br> 32<div id="aaaa">問題</div><br> 33<a class="cp_btn" onclick="stopTimer()">ストップ</a> 34 35 36<script> 37 38//配列をシャッフルする 39function shuffle(array) { 40 var n = array.length, t, i; 41 42 while (n) { 43 i = Math.floor(Math.random() * n--); 44 t = array[n]; 45 array[n] = array[i]; 46 array[i] = t; 47 } 48 49 return array; 50} 51 52 53// CSVファイル読み込み 54function csvToArray(path) { 55 var csvData = new Array(); 56 var data = new XMLHttpRequest(); 57 data.open("GET", path, false); 58 data.send(null); 59 var LF = String.fromCharCode(10); 60 var lines = data.responseText.split(LF); 61 for (var i = 0; i < lines.length;++i) { 62 var cells = lines[i].split(","); 63 if( cells.length != 1 ) { 64 csvData.push(cells); 65 } 66 } 67 return csvData; 68} 69 70//csvからdivにランダムで書き出す 71function miru(){ 72 var data = csvToArray("sample.csv"); 73 shuffle(data); 74 var p = document.getElementById('aaaa'); 75 76 p.innerHTML = data[0][1] //テキストを変更 77 78 console.log(p.innerHTML); 79 80 //alert(data[0][0]); 81} 82function startfnc() 83{ 84 //関数hyoji()を1000ミリ秒間隔で呼び出す 85 setInterval("miru()",2000); 86} 87function stopTimer(){ 88 89location.reload(); 90 91} 92 93</script> 94 95 96</body> 97</html>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。