78

Android アプリで Java コードを同期呼び出ししたいと考えています。

私はこのソリューションを使用しています: https://stackoverflow.com/a/3338656

私のJavaコード:

final class MyWebChromeClient extends WebChromeClient {
        public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
            Log.d("LogTag", message);
            result.confirm();
            return true;
        }
    }

私の JavaScript コード:

<html>
<script>
function java_request(){
    alert('test');
}
</script>
<body>
<h2>Welcome</h2>
<div id="area"></div>
<form>
<input type="button" value="java_call" onclick="java_request()">
</form>
</body>
</html>

ボタンをタップするとjava_call、ボタンが押された状態になります。'test'コンソールログで確認できます。ここまではすべて正常です。

問題は、ボタンが通常の状態に戻らないことです。押したままの状態です。多分JavaScriptの実行が壊れているか何か?

ボタンが通常の状態に戻らないのはなぜですか?

4

3 に答える 3

109

これは、javascript で Java コードを実行するための最良の解決策ではないと思います。ここを参照してください:

ネイティブ コードを HTML に公開して JavaScript 経由で呼び出し可能にする場合は、Web ビューの宣言で次の操作を行います。

JavaScriptInterface jsInterface = new JavaScriptInterface(this);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(jsInterface, "JSInterface");

クラスを宣言しますJavaScriptInterface:

public class JavaScriptInterface {
    private Activity activity;

    public JavaScriptInterface(Activity activity) {
        this.activity = activity;
    }

    @JavascriptInterface
    public void startVideo(String videoAddress){
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.parse(videoAddress), "video/3gpp"); 
        activity.startActivity(intent);
    }
}

動画を再生するための関数を 1 つだけ宣言していますが、やりたいことは何でもできます。

最後に、WebView単純な JavaScript 呼び出しを介してコンテンツでこれを呼び出します。

<video width="320" height="240" controls="controls" poster='poster.gif'
       onclick="window.JSInterface.startVideo('file:///sdcard/test.3gp');" >
   Your browser does not support the video tag.
</video>

この例は、ビデオの再生に関する私の別の回答から取られていますが、十分に説明する必要があります。

編集@CedricSoubrie のコメントによると: アプリケーションのターゲット バージョンが 17 以上に設定されている場合は@JavascriptInterface、Web ビューにエクスポートする各メソッドの上に注釈を追加する必要があります。

于 2012-04-30T19:49:25.140 に答える
1

関数は「true」を返します。これにより、HTML コードの「onclick」プロパティが true に等しくなるため、ボタンは「クリックされた」ままになります。

于 2014-06-30T16:12:54.350 に答える