为了账号安全,请及时绑定邮箱和手机立即绑定
首页 手记 【金秋打卡】第二十一天...

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

2022.11.15 23:05 52浏览

第一模块:

课程名称: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代码的字符串

第四模块:

https://img4.sycdn.imooc.com/6373a91f00010fc813660845.jpg

https://img4.sycdn.imooc.com/6373a91f0001f2ab13650766.jpg


点击查看更多内容
0人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
Web前端工程师
手记
粉丝
0
获赞与收藏
0

关注TA,一起探索更多经验知识

同主题相似文章浏览排行榜

风间影月说签约讲师

51篇手记,涉及Java、MySQL、Redis、Spring等方向

进入讨论

Tony Bai 说签约讲师

151篇手记,涉及Go、C、Java、Python等方向

进入讨论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消