273

AndroidWebビュー内で実行されている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ファイルがありますが、それらが問題である可能性がありますか?

4

8 に答える 8

206

問題が何であるかを突き止めました: testEcho() パラメータに引用符がありません。これが私が仕事への電話を受けた方法です:

myWebView.loadUrl("javascript:testEcho('Hello World!')");
于 2010-12-02T00:43:01.833 に答える
36
public void run(final String scriptSrc) { 
        webView.post(new Runnable() {
            @Override
            public void run() { 
                webView.loadUrl("javascript:" + scriptSrc); 
            }
        }); 
    }
于 2012-05-08T08:32:33.653 に答える
18

はい、構文エラーがあります。Javascript エラーを取得し、logcat でステートメントを出力したい場合は、WebChromeClient にonConsoleMessage(ConsoleMessage cm)メソッドを実装する必要があります。Web コンソール (Inspect 要素) のような完全なスタック トレースを提供します。これが方法です。

public boolean onConsoleMessage(ConsoleMessage cm) 
    {
        Log.d("Message", cm.message() + " -- From line "
                             + cm.lineNumber() + " of "
                             + cm.sourceId() );
        return true;
    }

console.log実装後、logcat にJavascript エラーと print ステートメント ( ) が表示されます。

于 2013-01-09T15:07:54.563 に答える