【黑马程序员】WebView跨域问题解决方案

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

最近在研究js和android之间的互调,正好就把很多问题统一整理下,慢慢看吧

先说下,我这里用的框架时JSBridge,用法很简单,自己参照下demo估计都能6得飞起,

关于js和原生互相调用,先看下官方的文档,然后在看下这个框架怎么用,其实很简单的~~

关于让android相应js里面的alert和console,也很简单,就是实现webchromclient 里面对应的方法,举一反三,不多做说明,我就直接上图

这样就能让js的alert和console在android上相应,这样在调试的时候也就变的很简单了

接下来就是跨域问题和解决方案

先说下跨域吧,就是报下图的错误,至于什么时跨域,参考这边文章咯:

解决方案:

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

2.这种方式是在前端做实现,是通过反射调用webview 得

setAllowUniversalAccessFromFileURLs 方法,传一个true 就好了

01 02 03 try {

if (Build.VERSION.SDK_INT >= 16) {

Class clazz = webView.getSettings().getClass();

04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 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 中都已经写的特别详细咯~~~

相关文档
最新文档