黑马程序员 WebView跨域问题解决方案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【黑马程序员】WebView跨域问题解决方案最近在研究js和android之间的互调,正好就把很多问题统一整理下,慢慢看吧
先说下,我这里用的框架时JSBridge,用法很简单,自己参照下demo估计都能6得飞起,
关于js和原生互相调用,先看下官方的文档,然后在看下这个框架怎么用,其实很简单的~~
关于让android相应js里面的alert和console,也很简单,就是实现webchromclient里面对应的方法,举一反三,不多做说明,我就直接上图
?
这样就能让js的alert和console在android上相应,这样在调试的时候也就变的很简单了
接下来就是跨域问题和解决方案
先说下跨域吧,就是报下图的错误,至于什么时跨域,参考这边文章咯:? ?
解决方案:
1.服务器端添加header,这种方式不安全(强烈的不推荐)
?
2.这种方式是在前端做实现,是通过反射调用webview得setAllowUniversalAccessFromFileURLs 方法,传一个true就好了
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 try {
????if 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 中都已经写的特别详细咯~~~
?