0

回帰テストの結果を要約するために使用されるスクリプトを書き直しています。テスト対象のプログラムは、いくつかの異なるテキスト ファイルを出力します。コード バージョン間でのこれらのファイルの変更は、開発者にとって興味深いものです。古いスクリプトでは、ファイルごとにコマンド ライン diff ユーティリティを使用していたため、かなりの時間がかかりました (2000 ほどのテストがあり、テストごとに 3 つのファイルを比較します。標準的な開発マシンでは、これに約 30 分かかりました)。次に、null 以外のすべての差分へのリンクを含むテーブルを含む HTML ファイルを生成しました。

開発者として、私はこれらの差分のほとんどが有用である一方で、ほとんど見られていないことに気づきました。このプロセスを高速化するために必要だったアイデアの 1 つは、Python の filecmp.cmp ツールを使用してファイルを比較し、すべての違いの表を作成することです。次に、Javascript を使用して、diff_match_patch ツールを使用して、クリックされたリンクのみを比較します。これらの結果はブラウザに表示されます。diff_match_patch の API は理解していると思いますが、これらのファイルを Javascript 環境にロードしようとして行き詰まりました。

これらのファイルを iframe (非表示にする) で開こうとしましたが、一度開くとファイルのコンテンツにアクセスできないようです。同じオリジンのルールがあることは認識していますが、html ファイルが存在するのと同じドライブからファイルを読み取ることになりますが、これは合法であると思います (?)。問題が DOM の理解にあるのか、それとも単にそれが不可能なのかはわかりません。Javascript に関する私の知識は非常に最小限/時代遅れであり、これが実際の問題である可能性がありますが、これは奇妙な使用例のように思われるため、例を見つけるのに苦労しました。ブラウザに癖がある場合は、使用するブラウザを指定することができます。これは私がこれまでに持っているものです。これは、ロードされたものとアクセスしているものを確認するための単なるテストです。Chrome では div に何も追加されず、Firefox では "

<html>
<head>
  <script type="text/javascript" language="JavaScript">
    function changeSrc() {
    var base = document.getElementById("base");
    base.src="../result/test1.txt";
    var mod = document.getElementById("mod");
    mod.src="../result/test2.txt";

    var result =  mod.contentWindow.document.body.innerText;
    document.getElementById('result').innerHTML = '<BR>' + result;
    }
  </script>
</head>

<body>
  <iframe id="base" src=""></iframe>
  <iframe id="mod" src=""></iframe>
  <br>
  <span onClick="changeSrc();" style="cursor: pointer;">loadFiles</span>
  <br>
  <div id="result"></div>
</body>
</html>

これを機能させるための助けや、時間を無駄にしているとのアドバイスをいただければ幸いです。私は他の既成概念にとらわれないアイデアにもオープンです。filecmp.cmp を実行する必要があることを考えると、時間の節約は問題にならないのでしょうか? 前もって感謝します!

編集:質問は私が推測する2つの部分です:1)Javascript関数で(文字列として)使用するテキストファイルを読み込むにはどうすればよいですか?2) これは悪い考えですか?

4

2 に答える 2

1

onloadを設定した直後ではなく、ハンドラーで iframe のコンテンツを取得するようにしてくださいsrc。ブラウザーがまだ iframe にファイルを読み込んでいる間に、取得コードが起動している可能性があります。

var mod = document.getElementById("mod");
mod.onload = function() {
    var result =  mod.contentWindow.document.body.innerText;
    document.getElementById('result').innerHTML = '<BR>' + result;
}
mod.src="../result/test2.txt";
于 2013-08-29T20:17:52.550 に答える