黑马程序员技术交流社区

标题: 【济南中心】WebView跨域问题解决方案 [打印本页]

作者: 大山哥哥    时间: 2016-10-30 22:11
标题: 【济南中心】WebView跨域问题解决方案
本帖最后由 小鲁哥哥 于 2020-1-8 17:07 编辑

点击查看济南黑马校区最新开班计划

最近在研究js和android之间的互调,正好就把很多问题统一整理下,慢慢看吧
先说下,我这里用的框架时JSBridge,用法很简单,自己参照下demo估计都能6得飞起,
关于js和原生互相调用,先看下官方的文档,然后在看下这个框架怎么用,其实很简单的~~
关于让android相应js里面的alert和console,也很简单,就是实现webchromclient里面对应的方法,举一反三,不多做说明,我就直接上图

这样就能让js的alert和console在android上相应,这样在调试的时候也就变的很简单了
接下来就是跨域问题和解决方案
先说下跨域吧,就是报下图的错误,至于什么时跨域,参考这边文章咯:    http://www.cnblogs.com/rainman/archive/2011/02/20/1959325.html


解决方案:
1.服务器端添加header,这种方式不安全(强烈的不推荐)


2.这种方式是在前端做实现,是通过反射调用webview得setAllowUniversalAccessFromFileURLs方法,传一个true就好了
[Java] 纯文本查看 复制代码
try {
    if (Build.VERSION.SDK_INT >= 16) {
        Class<?> clazz = webView.getSettings().getClass();
        Method method = clazz.getMethod(
                "setAllowUniversalAccessFromFileURLs", boolean.class);
        if (method != null) {
            method.invoke(webView.getSettings(), true);
        }
    }
} catch (IllegalArgumentException e) {
    e.printStackTrace();
} catch (NoSuchMethodException e) {
    e.printStackTrace();
} catch (IllegalAccessException e) {
    e.printStackTrace();
} catch (InvocationTargetException e) {
    e.printStackTrace();
}


当然,这个方法要尽量在前面调用。

至于webview的其他问题,碰到的过程种会继续补充,当然了,最好时先参考android sdk api,很多东西其实在api中都已经写的特别详细咯~~~



作者: feiruo521    时间: 2016-10-30 23:39
先收藏了再说

作者: 橘子哥    时间: 2016-10-31 16:29
好贴,值得收藏!
作者: baby14    时间: 2019-7-9 07:40
多谢分享




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2