android webview和js交互实现

来源:互联网 发布:悉尼动物园 知乎 编辑:程序博客网 时间:2024/05/24 06:24

要实现交互,就是让程序调用网页的function,让网页调用程序的方法。

Java调用JS:

  • 在程序中
    无参数
 webView.loadUrl(“javascript:methodName()”)

有参数

webView.loadUrl("javascript:methodName("+conent+")")
  • 在网页中
<script type="text/javascript">      function methodName() {   //此处为无参的执行方法      }      function methodName(content) {    //此处为有参的执行方法      }</script>
  • 需要注意:
    1.需要设置webSettings.setJavaScriptEnabled(true);

    2.webView.loadUrl(“javascript:methodName(parameterValues)”)是不可以在 页面加载时执行。想要加载时执行可以

    mWebView.setWebViewClient(new WebViewClient() {                 public void onPageFinished(WebView view, String url) {                     super.onPageFinished(view, url);               mWebView.loadUrl("javascript:methodName()");//                  }        });//在网页加载结束后执行

js调用java

  • 在程序中
mWebView.addJavascriptInterface(new className(), "jsInterfaceName"); 
  • 在网页中
<script type="text/javascript"> window.jsInterfaceName.methodName()`//methodName为class的方法 window.jsInterfaceName.methodName(content)//调用一个有参的方法 </script>

一个网页动态适配屏幕的例子:
demo.html

<!DOCTYPE html><html>    <head>        <meta charset="utf-8">        <title></title>        <script type="text/javascript">            function sayHello(str1,str2){                document.getElementById("t").style.width = str1+"px";                document.getElementById("t").style.height = str2+"px";            }        </script>    </head>    <body style="padding: 0;margin: 0;">        <div id="t" style="background-color: red;height: 400px; width: 300px;">            <div id='b'><a onclick="window.demo.clickOnAndroid()">点击调用java</a></div>            </div>    </body></html>

MainActivity主要方法

public class MainActivity extends Activity {    WebView mWebView;    int i,j;    int flag=0;    Handler mHandler=new Handler();    Button btn;    @SuppressWarnings("deprecation")    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mWebView = (WebView) findViewById(R.id.webview);        j=getWindowManager().getDefaultDisplay().getHeight()/2;        i=getWindowManager().getDefaultDisplay().getWidth()/2;        WebSettings webSettings = mWebView.getSettings();            webSettings.setJavaScriptEnabled(true);         mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");         mWebView.setWebViewClient(new WebViewClient() {            public void onPageFinished(WebView view, String url) {                super.onPageFinished(view, url);                mWebView.loadUrl("javascript:sayHello("+i+","+j+")");             }        });        mWebView.loadUrl("file:///android_asset/demo.html");     }    final class DemoJavaScriptInterface {        DemoJavaScriptInterface() {        }        public void clickOnAndroid() {            mHandler.post(new Runnable() {                public void run() {                    Toast.makeText(MainActivity.this, "java调用", Toast.LENGTH_LONG).show();                }            });        }    }    }
0 0
原创粉丝点击