0

私はWebViewを持っています。それはいくつかのjavascriptを持っています。assets フォルダーに保存されているより多くの JavaScript を動的かつ同期的に読み込む必要があります。

eval() は、アセットからコードを手動で取得して文字列として渡すと、問題なく動作します。

問題は、スタック トレースが文字列 eval で取り込まれたコードには役に立たないことです。「(file:///android_asset/...での評価」を取得するだけです

スタックトレースを便利にする、javascriptからjavascriptコードを動的に取り込む別の方法はありますか?

(参考までに、私はWebViewをjavascriptエンジンとして使用しているだけなので、既存のクロスプラットフォームのjavascriptをたくさん使用できます。有用なHTMLは表示されません。)

編集:

これを追加できます:

/@ sourceURL=snarkloading.js

評価される文字列に、ファイルの名前としてsnarkloading.jsを取得します。

4

1 に答える 1

2

このようなスクリプトをロードできます...

var script = document.createElement('script');
script.setAttribute("src", "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js");
script.onload = function () {
    // Do your thing when script is loaded
    alert('script loaded'); 
}; 
document.documentElement.appendChild(script);

onload イベント ハンドラにコードを記述します。これは、コードが実際にダウンロードされて利用可能になるときです。

更新 スクリプトを同期的にダウンロードする方法があります。これには、次のオプションで jQuery Ajax 関数を使用したことを覚えています。

async (ブール値)

デフォルト: 真

デフォルトでは、すべてのリクエストは非同期で送信されます (つまり、これはデフォルトで true に設定されています)。同期リクエストが必要な場合は、このオプションを false に設定します。クロスドメイン リクエストと dataType: "jsonp" リクエストは、同期操作をサポートしていません。同期リクエストはブラウザを一時的にロックし、リクエストがアクティブな間はすべてのアクションを無効にする場合があることに注意してください。jQuery 1.8 以降、async: false の使用は非推奨になりました。

詳細については、Ajax の jQuery API ドキュメントを参照してください。ドキュメントには、jQuery 1.8 で非推奨になったと記載されています。しかし、古いバージョンを手に入れることができれば、それを使用したり、彼らがどのようにそれを行ったかを理解することができます.

于 2012-07-11T18:19:52.943 に答える