Android WebView 内で実行されている HTML ページにあるいくつかの JavaScript 関数を呼び出そうとしています。以下のコードが実行しようとしているのは非常に単純です。Android アプリからテスト メッセージを使用して JavaScript 関数を呼び出し、次に Android アプリで Java 関数を呼び出し、トースト経由でテスト メッセージを表示します。
JavaScript 関数は次のようになります。
function testEcho(message){
window.JSInterface.doEchoTest(message);
}
WebView から、次の方法で JavaScript を呼び出そうとしましたが、うまくいきませんでした。
myWebView.loadUrl("javascript:testEcho(Hello World!)");
mWebView.loadUrl("javascript:(function () { " + "testEcho(Hello World!);" + "})()");
WebViewでJavaScriptを有効にしました
myWebView.getSettings().setJavaScriptEnabled(true);
// register class containing methods to be exposed to JavaScript
myWebView.addJavascriptInterface(myJSInterface, "JSInterface");
そしてこれがJavaクラスです
public class JSInterface{
private WebView mAppView;
public JSInterface (WebView appView) {
this.mAppView = appView;
}
public void doEchoTest(String echo){
Toast toast = Toast.makeText(mAppView.getContext(), echo, Toast.LENGTH_SHORT);
toast.show();
}
}
何が間違っているのか調べるために、グーグルで調べるのに多くの時間を費やしました。私が見つけた例はすべてこのアプローチを使用しています。ここで何か間違っていることに気づいた人はいますか?
編集: HTML で参照および使用されている他の外部 JavaScript ファイルがいくつかありますが、それが問題なのでしょうか?
ベストアンサー1
問題が何であるかが分かりました。testEcho() パラメータに引用符がありませんでした。呼び出しを機能させるには次のようにしました。
myWebView.loadUrl("javascript:testEcho('Hello World!')");