2

Javascript で書かれた複雑なプログラムをデバッグしていました。大きなマトリックスの変化を見る必要があります。Chrome Inspect Element を使用してマトリックス内の各要素を表示するのは便利ではありません。だから、私はデータをテキストファイルに書きたいと思っています。FileSystem API とターミナルを見つけました。

FileSystem ターミナル プロジェクトを参照して、FileSystem API をプロジェクトに統合しました。そして、 fs.root を格納するグローバル変数を定義します。私が望むのは、デバッグ時にこの変数をプログラムに渡すことです。これにより、この fs.root を使用してデータをテキスト ファイルにダンプできます。ファイルシステムをリクエストします:

 window.requestFileSystem(window.TEMPORARY, 5*1024*1024, onInitFs, errorHandler); // 5MB

しかし、「onInitFs」関数は、非常に遅く呼び出されるメッセージ応答関数のようです。「onLoad='MyFun();'」の後でも。そのため、変数「fs.root」が定義されていることを確認するために、独自の関数をどこに配置すればよいかわかりません。今、「MyFun()」をどこにでも配置しましたが、「onInitFs」関数が呼び出されていないため、「fs.root」が定義されていないというエラーが発生します。呼び出しシーケンスをテストしました:

-------------main.html

<html>
      <header>
            <script type='text/javascript' src='MyFun.js'></script>
            <script type='text/javascript' >
                   console.log('01Position');

                   function onInitFs(fs)
                   {
                        aGlobalFsRoot = fs.root;
                        console.log('04Position');
                   }
          window.requestFileSystem(window.TEMPORARY, 5*1024*1024, onInitFs, errorHandler);
            </script>
      </header>
      <body onLoad="MyFun();">
            <script>
                   console.log('02Position');
            </script>
      </body>
</html>

-------------MyFun.js

var aGlobalFsRoot;
function MyFun()
{
    console.log('03Position');
    // want to use "aGlobalFsRoot" to dump some matrix data, but it is not defined, which means "onInitFs()" is still not called.
}

したがって、Chrome Inspect Element のコンソール ウィンドウで: 01Position 02Position 03Position 04Position

「MyFun()」よりも早く呼び出される「onInitFun()」関数を有効にできますか? または、"MyFun()" をどこに配置すればよいので、"onInitFun()" よりも後で呼び出すことができます。MyFun は読み込み時に前処理作業を行うだけなので、ユーザーにボタンを 1 つクリックさせたくありません。"MyFun()" が "onInitFs()" よりも後で呼び出されるように、メッセージを 1 つ生成してもよろしいですか?

4

1 に答える 1

1

アンドレイのコメント、または次のいずれかが機能するはずです。

window.requestFileSystem(window.TEMPORARY, 5*1024*1024, function(fs) {onInitFs(fs); MyFun(fs); } , errorHandler);

私が理解しているように、fs API は意図的に非同期になるように設計されています。したがって、強制的に任意の順序で呼び出すことはできません。したがって、同期的な考え方ではなく、非同期的な考え方に適応する必要があります。

ファイル システム リクエストが完了したときに呼び出されるようにする場合MyFunは、ファイル システム リクエストが完了したときに実行するようにフックMyFunします (他の無関係なonBodyLoadイベントに対してではありません)。

于 2011-09-22T05:50:11.480 に答える