上海延誉
上海延誉
  • 发布:2021-02-08 11:42
  • 更新:2021-03-09 09:06
  • 阅读:1018

【报Bug】APP打包后,在iOS中通过hybrid调用本地html,路径中包含#则不识别,Android没有问题,http访问也没有问题

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Win10

HBuilderX类型: 正式

HBuilderX版本号: 3.1.2

手机系统: iOS

手机系统版本号: IOS 14

手机厂商: 苹果

手机机型: iPhone X

页面类型: vue

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:

例如: /hybrid/html/ecard/index.html#/shouye
ecard这个子项目使用angularjs写的,所以路径中会带有#这个符号。

预期结果:

可以正常路由到/shouye

实际结果:

在Android 中打包后可以正常打开,在iOS中则不行,在代码中调试发现是没有找到 /shouye这个路由,进一步识别路径,发现应该是“#”被转为“%23d”这样的字符。

bug描述:

APP打包后,在iOS中通过hybrid调用本地html,路径中包含#则不识别,

例如: /hybrid/html/ecard/index.html#/shouye
ecard这个子项目使用angularjs写的,所以路径中会带有#这个符号。

在Android 中打包后可以正常打开,在iOS中则不行,在代码中调试发现是没有找到 /shouye这个路由,进一步识别路径,发现应该是“#”被转为“%23d”这样的字符。

Android没有问题,http访问也没有问题。

在iOS中将路径换成:
http://test.tseo.cn/uniapp/mytest/hybrid/html/ecard/index.html#/shouye
则访问正常,所以,可能是iOS的打包框架中,没有对file:///开头的路径做出判断造成的。

2021-02-08 11:42 负责人:无 分享
已邀请:
DCloud_UNI_GSQ

DCloud_UNI_GSQ

是使用的 web-vew 组件吗?

上海延誉

上海延誉 (作者)

是的,使用web-view组件。web-view组件的hybrid URL,参数中不带#的访问,一切正常。带了#来只是路由,URL中的SPA(但也应用)则找不到路由。直接通过http引入在web-view中则正常,只是通过hybrid从本地引入才出现此BUG。

上海延誉

上海延誉 (作者)

可以参考以下内容:
https://www.jianshu.com/p/94b1c1d8e42a

项目需要从本地加载的Url链接是

/var/mobile/Containers/Data/Application/22438350-8530-4B0B-BFDD-FBCE7A9F873B/Documents/components/dist/main.html#/main

但是调用

NSURL * URL = [NSURL fileURLWithPath:indexHtmlPath];

打印URL.absoluteString却变成了

file://var/mobile/Containers/Data/Application/22438350-8530-4B0B-BFDD-FBCE7A9F873B/Documents/components/dist/main.html%23/main

对比两个Url链接,除了# 被%23替换之外,链接还加了前缀file:/,我们能不能直接在初始化之前,自己拼接Url加上前缀,接着用我们常见的Url初始化方法,来初始化呐,答案是肯定de

indexHtmlPath = [NSString stringWithFormat:@"file:/%@", indexHtmlPath];
NSURL * URL = [NSURL URLWithString: indexHtmlPath];

该问题目前已经被锁定, 无法添加新回复