android webview和js交互实现

要实现交互,就是让程序调用网页的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();
                }
            });

        }
    }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值