手记

【金秋打卡】第二十一天 android与webView的js交互

第一模块:

课程名称:android与webView的js交互

章节:1-1~4-1

讲师名称:西门老舅

第二模块:

1.  webView调用java方法

允许webView加载js

WebView.getSettings().setJavaScriptEnabled(true);

编写js接口类

 给webView添加js接口

WebView.addJavascriptInterface(obj,name);

注意:js交互中常见的一些错误

1.      js接口的回调方法中throw exception

2.      Web端不进行对象存在判断

3.      传递参数类型不一致(尤其是数组和对象)

4.      字符串类型参数为空时传递undefined

第三模块:

webView.addJavaScriptInterface(new Object(){xxx}, "xxx");
// 可以使用WebView控件执行JavaScript脚本,并且可以在JavaScript中执行Java代码。要想让WebView控件执行JavaScript,需要调用WebSettings.setJavaScriptEnabled方法:
WebView webView = (WebView)findViewById(R.id.webview)
WebSettings webSettings = webView.getSettings()
//设置WebView支持JavaScript
webSettings.setJavaScriptEnabled(true)
webView.setWebChromeClient(new WebChromeClient())
// JavaScript调用Java方法需要使用WebView.addJavascriptInterface方法设置JavaScript调用的Java方法:
webView.addJavascriptInterface(new Object()
{
    public String process(String value)
    {
        return result;
    }}, "demo");
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>测试</title>
    <script type="text/javascript">
        function test(){
            client.test()
        }
 
    </script>
</head>
<body>
<br />
<button onclick="test()">test</button>
</body>
</html>
 
public class WebActivity extends Activity{
 
    ProgressBar mProgressBar;
    WebView mWebView;
    String mUrl;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.web);
        mWebView = (WebView) findViewById(R.id.web_view);
        mProgressBar = (ProgressBar) findViewById(R.id.loading_progress);
        doWebViewSetting();
//    加载网页
        loadUrl("http://172.10.1.2:8080/test");
    }
 
    private void doWebViewSetting(){
//   设置WebClient(可不要)
        mWebView.setWebViewClient(new MyWebViewClient());
//  支持js(必要)
        mWebView.getSettings().setJavaScriptEnabled(true);
//    添加js对象(必要)
        mWebView.addJavascriptInterface(new JsOperation(this), "client");
    }
 
    private void loadUrl(String url) {
        mUrl = url;
        mProgressBar.setVisibility(View.VISIBLE);
        mWebView.loadUrl(url);
    }
 
 
    class MyWebViewClient extends WebViewClient{
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            mProgressBar.setVisibility(View.GONE);
        }
    }
    class JsOperation {
 
        Activity mActivity;
 
        public JsOperation(Activity activity) {
            mActivity = activity;
        }
 
//    测试方法       @javascriptInterface
        public void test() {
            Toast.makeText(mActivity,"test",Toast.LENGTH_SHORT).show();
        }
}
// Android调用js方法
使用loadUrl方法调用javascript
WebView.loadUrl(javascript:jsString)
jsString是要调用的js代码的字符串

第四模块:


0人推荐
随时随地看视频
慕课网APP