android webview source,Android WebView踩坑集锦(一)

该博客围绕原生Android项目中WebView展开。介绍了加载assets/www文件夹下index.html时出现的错误及解决办法,还提及本地HTML文件使用ajax获取数据的跨域问题及对应方案,同时指出Hybrid App开发中5.0以上需开启第三方Cookie存储以解决认证问题。

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

项目背景

原生Android项目中通过 WebView 加载 assets/www 文件夹下的 index.html。

ERROR, source file:///android_asset/www/build/vendor.js (1)

从 Android Studio 的 Log 记录中发现此错误信息,然后通过 Chrome 的 inspect 工具查看到 Log 为:TypeError: Cannot read property 'setItem' of null {stack: (...),解决方案如下:

// webview的设置中添加如下代码

WebSettings settings = webView.getSettings();

settings.setDomStorageEnabled(true);

跨域问题

假如本地HTML文件中使用ajax获取数据,则会遇到跨域问题,报错的Log如下:

XMLHttpRequest cannot load '...'. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 500.", source: file:///android_asset/www/index.html (0)

解决方案如下:

// webview的设置中添加如下代码

try {

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

Class> clazz = webview.getSettings().getClass();

Method method = clazz.getMethod("setAllowUniversalAccessFromFileURLs", boolean.class);

if (method != null) {

method.invoke(vb.getSettings(), true);

}

}

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (NoSuchMethodException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

}

Cookie身份认证

Hybrid App开发少不了认证的问题,5.0以上需要开启第三方Cookie存储

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

CookieManager.getInstance().setAcceptThirdPartyCookies(webview, true);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值