HarmonyOS鸿蒙Next中元服务ASCF开发,web-view组件内部网页使用了高德地图,地图js脚本无法加载
HarmonyOS鸿蒙Next中元服务ASCF开发,web-view组件内部网页使用了高德地图,地图js脚本无法加载 项目是微信小程序迁移到元服务,发现了web-view访问h5问题尝试几次无法解决。
H5页面引用了高德地图,加载js脚本时,在ASCF调试器中查看到一只处于pending中,无法加载,导致高德实例注入失败。其它引用的脚本却能直接引用,请问大家有没有遇到相同问题,或者有什么解决方案?
tips:高德地图域名无法添加业务域名
设备是 X5,HarmonyOS版本 6.0.0,软件版本:6.0.0.120
部分日志
I NAPI_CheckDomainBlockList called
I AtomicBasicEngineSaClient begin to get instance
I AtomicBasicEngineSaClient begin to CheckDomainBlockList
I Hag proxy object already exists
I HagServiceabilityProxy begin to CheckDomainBlockList, url:https://webapi.amap.com/maps
I HagServiceabilityProxy begin to CheckDomainBlockList, bundleName:xxxxxxxxxxxxxx(隐藏)
I [ASCF Main]: DomainControl --> checkUrlBlockList -> ret=false url=https://webapi.amap.com/maps
I [CurlSetRequestOptions]DoDownload curl easy_perform failure: URL using bad/illegal format or missing URL
I [media_avsession_adapter_impl.cpp:411] UpdateMetaData return updated: 1
I GetInstance: webdatabase get permission data base instance
I CreateDataBase: web permission database create rdb store
I CreateDataBase: web permission database databaseDir=/data/storage/el2/base/cache/web
I CreateDataBase: web permission database bundleName=com.atomicservice.xxxxxxxxxxxxxx(隐藏)
I Config[Log]: Error(283) recovered 5 frames from WAL file /dat***/sto***/e**/bas***/cac***/w**/r**/web***ion.db-wal
I ConnectionPool[Create]: code:0 app[com.atomicservice.xxxxxxxxxxxxxx(隐藏):] area[el2] cfg[0,0,0,2,5,0,0]web***.db:<DB,0x289ce,4096,100660><DWR,0x28a12,12288,100660><SHM,0x28ba3,32768,100660><WAL,0x28a7e,20632,100660>, pathSize:54
I CreateDataBase: web permission database create rdb store end, errCode=0
I ExistPermissionByOrigin: web permission database check exist permissions
E ExistPermissionByOrigin: web permissions database rdb store query failed
E [resource_request.cc:41] scheme_handler resource request donn't have upload stream.
I NAPI_CheckDomainBlockList called
I AtomicBasicEngineSaClient begin to get instance
I AtomicBasicEngineSaClient begin to CheckDomainBlockList
I Hag proxy object already exists
I HagServiceabilityProxy begin to CheckDomainBlockList, url:https://hm.baidu.com/hm.gif
I HagServiceabilityProxy begin to CheckDomainBlockList, bundleName:xxxxxxxxxxxxxx(隐藏)
I [ASCF Main]: DomainControl --> checkUrlBlockList -> ret=true url=https://hm.baidu.com/hm.gif
I [nweb_scheme_handler_factory.cc:181] scheme_handler not intercept the request.
E [resource_request.cc:41] scheme_handler resource request donn't have upload stream.
I NAPI_CheckDomainBlockList called
I AtomicBasicEngineSaClient begin to get instance
I AtomicBasicEngineSaClient begin to CheckDomainBlockList
ASCF信息
{
"sharedBundleInfo": {
"compatiblePolicy": 1,
"name": "com.huawei.hms.ascfruntime",
"sharedModuleInfos": [
{
"compressNativeLibs": true,
"cpuAbi": "arm64-v8a",
"description": "$string:shared_desc",
"descriptionId": 33554434,
"hapPath": "/data/app/el1/bundle/public/com.huawei.hms.ascfruntime/v10019300/ascf/ascf.hsp",
"moduleArkTSMode": "dynamic",
"name": "ascf",
"nativeLibraryFileNames": [],
"nativeLibraryPath": "ascf/libs/arm64",
"versionCode": 10019300,
"versionName": "1.0.19.300"
}
]
}
}
更多关于HarmonyOS鸿蒙Next中元服务ASCF开发,web-view组件内部网页使用了高德地图,地图js脚本无法加载的实战教程也可以访问 https://www.itying.com/category-93-b0.html
尊敬的开发者,您好!如不能满足您的需求,请提供以下信息:
请问您是在什么样的业务场景中使用该能力,交互流程是怎样的,在哪一个环节遇到了问题?方便说明能力不满足可能带来的影响:什么时间用到?是否高频?有无三方库可以做到?若提供该能力,是否会造成大工作量返工?请您注意提供的内容不要包含您或第三方的非公开信息,如给您带来不便,敬请谅解。
更多关于HarmonyOS鸿蒙Next中元服务ASCF开发,web-view组件内部网页使用了高德地图,地图js脚本无法加载的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
提交了工单,得到官方回复,结论:使用官方api
由于生态规则限制,元服务内的地图服务不支持使用高德地图,MapKit 提供可靠、合规且体验一致的地图能力。
鸿蒙Next元服务中web-view组件加载高德地图JS脚本问题
问题描述
在鸿蒙Next元服务中,使用web-view组件加载高德地图JS脚本时出现无法加载的情况。
主要原因
鸿蒙Next系统对Web组件的安全限制导致此问题,具体包括:
- HTTPS限制:web-view默认禁止加载非HTTPS资源
- 脚本管控:对第三方JS脚本加载有严格管控机制
- 协议限制:高德地图JS若使用HTTP协议会被系统拦截
- 域名限制:特定域外资源可能无法正常加载
解决方案
1. 配置网络安全权限
在config.json文件中配置web-view的网络安全权限,允许加载指定域名的JS资源。
2. 确保使用HTTPS协议
确保高德地图JS资源使用HTTPS协议进行加载,避免因协议问题被系统拦截。
3. 域名白名单配置
在配置中明确允许高德地图相关域名的资源加载,通过白名单机制绕过系统安全限制。
根据日志分析,这是HarmonyOS Next中web-view组件的网络安全策略导致的。关键日志显示:
[ASCF Main]: DomainControl --> checkUrlBlockList -> ret=false url=https://webapi.amap.com/maps
[CurlSetRequestOptions]DoDownload curl easy_perform failure: URL using bad/illegal format or missing URL
高德地图域名 webapi.amap.com 被系统域名拦截机制阻止加载。对比其他可正常加载的域名(如 hm.baidu.com)的日志 ret=true,说明系统存在域名白名单机制。
解决方案:
-
配置网络域名权限 在
module.json5配置文件中添加网络域名声明:{ "module": { "requestPermissions": [ { "name": "ohos.permission.INTERNET" } ], "abilities": [ { "name": "你的Ability名称", "srcEntry": "./ets/entryability/EntryAbility.ets", "permissions": [ { "name": "ohos.permission.INTERNET" } ] } ] } } -
配置web-view的网络安全策略 在web-view组件中显式设置允许加载的域名:
Web({ src: '你的H5页面地址', controller: this.controller }) .domStorageAccess(true) .fileAccess(true) .onProgressChange((event) => { // 加载进度处理 }) -
检查H5页面引用方式 确保高德地图JS SDK使用HTTPS协议完整URL:
<script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=你的密钥"></script> -
验证网络连接状态 在加载web-view前检查设备网络状态,确保网络通畅。
如果以上配置仍无法解决,可能是系统对特定地图服务域名有更严格的限制。建议将地图功能迁移到HarmonyOS原生地图组件,或使用华为地图服务替代高德地图,可获得更好的兼容性和性能。

