Android错误集锦之WebView

本文总结了Android WebView开发过程中常见的错误,包括跨域访问问题、字符串处理错误以及调用JavaScript方法时的问题,并提供了详细的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发中总是遇到各种奇葩的错误,做一个错误收集集合

也可查看:android WebView之大坑

WebView 错误集合

1.跨域问题:做webapp的时候,写js会碰到 XMLHttpRequest cannot load http://abc Origin http://def  is not allowed by Access-Control-Allow-Origi 跨域问题: 

解决方案参考地址:方案一 方案二

解决方案: 思路:访问android WebView private 对象 WebViewCore mWebViewCore,调用 mWebViewCore的private 方法nativeRegisterURLSchemeAsLocal,把http和https忽悠成本地访问。 XMLHttpRequest即可自由跨域。

注:android 4.1煎饼以上还需要设置WebSettings.setAllowUniversalAccessFromFileURLs(true) 

2.字符问题: 由于加多了引号导致 [INFO:CONSOLE(1)] "Uncaught SyntaxError: missing ) after argument list", source:  (1)

解决方案参考地址: 参考一 参考二

解决方案:

JSONObject jsonObject = new JSONObject();
jsonObject.put("si", "dfasfsa");
jsonObject.put("url", "http://xxxx");
String xx = jsonObject.toString();//toUtf8(js);
//String xxs = "javascript:initializeAsyn_app(\"" + xx + "\")";//这个是错误的
String xxs = "javascript:initializeAsyn_app(" + xx + ")";//这个是正确的  initializeAsyn_app html的方法名称
webView.loadUrl(xxs);

String content = "9880";
webView.loadUrl("javascript:alertMessage(\"" + content + "\")");//这个是一般String的写法

3.webView调用js方法问题:webView没有加载完毕调用html中的js方法报错:Uncaught ReferenceError: is not define或者has no method

解决方案参考地址:地址一 

解决方案:

我们在 onPageFinished的时候,全部的js肯定都加载完毕了,这时候再执行loadUrl方法,就可以啦

 private class WebViewClientDemo extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            Log.d(TAG, " url:"+url);


            view.loadUrl(url);// 当打开新链接时,使用当前的 WebView,不会使用系统其他浏览器
            return true;
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            //在这里执行你想调用的js函数
            if(!flag_get_deviceid){
                loadUrl();
            }
        }
    }


顺便提一下 webview.evaluateJavascript的好处,这个方法,可以把js函数的return结果获取到:
两种webWiew调用js的方法,第1种: mWebview.loadUrl("javascript:getDeviceID('maomao')");                                                            第2种if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        String script=String.format("javascript:getDeviceID('"+androidID+"')");
        webView.evaluateJavascript(script, new ValueCallback<String>() {
            @Override
            public void onReceiveValue(String value) {
                Log.d("onReceiveValue", "onReceiveValue value=" + value);
            }});
    }





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值