3

Android アプリで JavaScript 関数を実行したいのですが、これが webview の作成方法です。

m_FullJSWebView = new WebView(m_VideoView.getContext());
m_FullJSWebView.loadData(htmltmp, "text/html", "UTF-8");
m_FullJSWebView.getSettings().setJavaScriptEnabled(true);
m_FullJSWebView.addJavascriptInterface(new JavaScriptInterface(m_VideoView.getContext()), "MyAndroid");
m_FullJSWebView.loadUrl("javascript:getValue()");

これはhtmlです:

<html>
  <head>
    <script type="text/javascript">
    function getValue(){
       //return value to Android 
       var val= 50;
       MyAndroid.receiveValueFromJs(val);
    }
    </script>
    <title></title>
  </head>
  <body >
    <form name="ipForm" id="ipForm">
      UserName : <input type="text" name="userName">
      <button type="button" onclick="getValue();">Submit</button>
    </form>
  </body>
</html>

そして、これは次のJavascriptInterfaceとおりです。

public class JavaScriptInterface {
        Context mContext;
        JavaScriptInterface(Context c) {
            mContext = c;
        }
        //add other interface methods to be called from JavaScript

        public void receiveValueFromJs(String str) {
            //do something useful with str
              Toast.makeText(mContext, "Received Value from JS: " + str,Toast.LENGTH_SHORT).show();
        }
}

デバイスで実行した後、receiveValueFromJs関数が呼び出されません。何が問題なのですか?

4

1 に答える 1

1

ドキュメントから:

挿入されたオブジェクトは、ページが次に (再) ロードされるまで JavaScript に表示されないことに注意してください。

つまり、次のようにメソッドの順序を変更する必要があります。

m_FullJSWebView = new WebView(m_VideoView.getContext());
m_FullJSWebView.addJavascriptInterface(new JavaScriptInterface(m_VideoView.getContext()), "MyAndroid");
m_FullJSWebView.loadData(htmltmp, "text/html", "UTF-8");
m_FullJSWebView.getSettings().setJavaScriptEnabled(true);
m_FullJSWebView.loadUrl("javascript:getValue()");

編集(第2号)

nameパラメーターはaddJavascriptInterface、javascript の Java オブジェクトの名前です。javascript からメソッドを呼び出すオブジェクトです。

したがって、呼び出しは次のようになります。

m_FullJSWebView.loadUrl("javascript:MyAndroid.getValue()");
于 2013-07-16T09:09:09.850 に答える