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

- 发布:2021-02-08 11:42
- 更新:2021-03-09 09:06
- 阅读:1018
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: Win10
HBuilderX类型: 正式
HBuilderX版本号: 3.1.2
手机系统: iOS
手机系统版本号: IOS 14
手机厂商: 苹果
手机机型: iPhone X
页面类型: vue
打包方式: 云端
项目创建方式: HBuilderX
操作步骤:
预期结果:
可以正常路由到/shouye
可以正常路由到/shouye
实际结果:
在Android 中打包后可以正常打开,在iOS中则不行,在代码中调试发现是没有找到 /shouye这个路由,进一步识别路径,发现应该是“#”被转为“%23d”这样的字符。
在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:///开头的路径做出判断造成的。
3 个回复
DCloud_UNI_GSQ
是使用的 web-vew 组件吗?
上海延誉 (作者)
是的,使用web-view组件。web-view组件的hybrid URL,参数中不带#的访问,一切正常。带了#来只是路由,URL中的SPA(但也应用)则找不到路由。直接通过http引入在web-view中则正常,只是通过hybrid从本地引入才出现此BUG。
上海延誉 (作者)
可以参考以下内容:
https://www.jianshu.com/p/94b1c1d8e42a
/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];