17

Android WebView を使用して、いくつかの Web ページをロードしています。ロードする前に、すべてのページに Javascript コードを挿入する必要があります。

それらを WebViewClient onPageStart コールバックに挿入しようとしています。

mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebViewClient(new WebViewClient(){

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        loadUrl("javascript:var output='test string';");
        }
})

mWebView.loadUrl("xxx.html");

HTML コード:

<html>
<script>document.write(output);</script>
</html>

HTML の前に My Js コードがロードされることを期待していました。ただし、JS コードが HTML の後に読み込まれることがあります。

私の問題を解決する方法はありますか?

4

8 に答える 8

7

私は同じ問題を抱えていて、それを解決しました。ロード前に非表示WebViewにし、ページのロード後に表示します。

webView.getSettings().setJavaScriptEnabled(true);
b.webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        return false;
    }

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            b.webView.evaluateJavascript("javascript:window.document.getElementsByTagName('body')[0].style.color='white';", null);
        }
        else
        {
            b.webView.loadUrl("javascript:window.document.getElementsByTagName('body')[0].style.color='white';");
        }
        b.webView.setVisibility(View.VISIBLE);
    }

});

b.webView.setVisibility(View.INVISIBLE);
b.webView.loadUrl(PreferenceHelper.EULA_URL);
于 2016-06-29T12:20:14.430 に答える
3

javascript 経由でページをロードするのはどうですか?

アセットに空白の HTML ページを作成します。これには、スクリプトとこの小さな関数が含まれます (ここでは簡単にするために jquery を使用していますが、別のフレームワークを使用することも、フレームワークをまったく使用しないこともできます)。

window.loadPage = function (url) {
    $.get(url, function(page) {
        $('html').replace(page);
    });
};

次に、Android アプリで:

mWebView.loadUrl("javascript: loadPage('xxx.html')");

注 : xxx.html がアセットにもあり、Web サーバーのどこかにある可能性があることに気付きませんでした。その場合、セキュリティ上の理由で ajax クエリは失敗しますが、ajax リクエストを忘れて、文字列で html ページを読むことができますAndroid アプリから、わずかに変更された JavaScript 関数に引数として渡します。

于 2013-01-10T18:50:15.110 に答える
0

おそらく最も単純ではない方法の 1 つは、HttpClient を使用して Web サーバーからデータを自分で読み取り、それを変更して、次を使用して webview に設定することです。

webview.loadData(mydata, "text/html", null);
于 2013-01-09T17:49:22.143 に答える
0

Phonegap と JavaScript のインターフェイスを組み合わせて使用​​します。

メインの .java ファイルの OnCreate() に、次を含めます。

super.appView.addJavascriptInterface(new Object()
        {
          public void setOutput()
          {
            // here the body of your method in Android
          }
        }, "myInterface");

次に、.js ファイルにこれを含めます (同じファイルに Phonegap をインポートして、onDeviceReady メソッドをキャッチする必要があります)。

function onDeviceReady() {
        myInterface.setOutput();
      }

これにより、アプリケーションの起動の最初の瞬間に、デバイスの準備が整ったときに JavaScript からメソッドがトリガーされます。

于 2013-01-10T12:41:07.810 に答える
-1

JavaスクリプトをHTMLページ内に配置してから、Android Javaスクリプト関数呼び出しを使用すると役立つ場合があります

于 2012-12-28T06:03:45.067 に答える
-1


webView.addJavascriptInterface("test string", "output");
Web ページが読み込まれる前に、必要なオブジェクトを挿入するために使用できます。

于 2016-04-18T03:37:01.707 に答える