1

私はhtmlページをカスタムwebViewにロードしようとしています.また、4つのjavascriptファイルをwebViewにロードする必要があります.javascript参照をhtmlのheadタグに直接入れるとうまくいきましたが、実行時にAndroidからロードすると関数、それらは正しくロードされましたが、機能せず、「キャッチされていない参照エラー関数が定義されていません」という例外をキャッチします。

これが私が2つのステータスで行うことです:

ステータス 1: 参照を直接ロード:

これは完全に機能します.....

<html>

<head>
<head>

<script type="text/javascript" src="file:///android_asset/selection/android.selection.js"></script>
<script type="text/javascript" src="file:///android_asset/selection/jquery.js"></script>
<script type="text/javascript" src="file:///android_asset/selection/rangy-core.js"></script>
<script type="text/javascript" src="file:///android_asset/selection/rangy-serializer.js"></script>      
</head>
<body>
......
</body>
</html>

ステータス 2: webview client,,, onPageFinished メソッドで Android アプリケーションからロードします。このコードを入力します。

String str =  "javascript: (function() { "

            + " var rangycore=document.createElement('script');"
            + " rangycore.type='text/javascript';"
            + " rangycore.src='file:///android_asset/selection/rangy-core.js';"
    +"document.getElementsByTagName('head').item(0).appendChild(rangycore);"

            + " var rangyserializer=document.createElement('script');"
            + " rangyserializer.type='text/javascript';"
            + " rangyserializer.src='file:///android_asset/selection/rangy-serializer.js';"
            + " document.getElementsByTagName('head').item(0).appendChild(rangyserializer);"

            +  " var select=document.createElement('script');"
            + " select.type='text/javascript';"
            + " select.src='file:///android_asset/selection/android.selection.js';"
            + " document.getElementsByTagName('head').item(0).appendChild(select);"

            + " var jquery=document.createElement('script');"
            + " jquery.type='text/javascript';"
            + " jquery.src='file:///android_asset/selection/jquery.js';"
            + " document.getElementsByTagName('head').item(0).appendChild(jquery);})()";


    BTWebView.this.loadUrl(str);

head タグにはスクリプト文字列が正しく追加されていますが、この印刷コンソール メッセージは「uncaught referenceerror: rangy is not defined」です。

どうすればこの問題を解決できますか。ありがとうございます....

4

3 に答える 3

0

実行時に JavaScript をロードするためのはるかにシンプルで洗練された方法は、1.7 KB の小さなライブラリであるyepnopeです。

yepnope({
  load: [
    "file:///android_asset/selection/android.selection.js",
    "file:///android_asset/selection/jquery.js",
    "file:///android_asset/selection/rangy-core.js",
    "file:///android_asset/selection/rangy-serializer.js"
  ],
  complete: function () {
    alert('loaded successfully');
  }
});

コードが少なくなるため、連結された文字列のバグが少なくなる可能性があります。

また、利用可能なコールバックは、エラーの発見や便利な機能の追加に役立つ場合があります。

于 2012-09-05T12:54:51.060 に答える
0

2 つの例では、ファイルを異なる順序でロードしています!

スクリプト ファイルをロードする順序は重要です。解決できなかった依存関係があると思います。

于 2012-09-05T12:59:01.733 に答える