iOS本地html页面使用锚点定位

最近在为公司一个老项目加一个小功能,功能需求是要在登录界面上,根据登录错误提示码跳转到一个本地错误指引的html页面

首先当然是编辑该html页面增加锚点,也就id=错误码,然后在登录失败后直接路径加上"#错误码"就可以直接跳转到相应的错误码页面。

iOS本地html页面使用锚点定位_第1张图片
增加id=300.png

然而我在为原来的路径加上#错误码并不起作用,webview也无法加载这个页面

NSString*path = [[NSBundle mainBundle]  pathForResource:@"help"ofType:@"html"];
[path stringByAppendingString:@"#200"];

把webView的错误打印出来,才知道是路径问题。

NSURL *url = [NSURL fileURLWithPath:[self.urlString copy]];

url打印输出为:file:///Users/.../help.html%23300,“#”会被该方法编码成%23,出现找不到该文件的情况。而加载本地的文件又不适合用URLWithString:方法。
后来转念一想,可以换一种方式,path路径不做错误码的拼接,而在webViewDidFinishLoad:方法中注入调用页面的JS方法:

[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"javascript:window.location.hash=%d",self.errorCode]];

PS:改用URLWithString:方法也可以奏效。
而这两个方法的区别在于:fileURLWithPath是将str转化为文件路径。而URLWithString紧紧是将url2转化成NSURL类型,对于它的内容没有任何的改变,即不会将#编码为%23,所得到的url不同。

  • file:///Users/ey/Library/.../help.html
  • /Users/ey/Library/... /help.html

你可能感兴趣的:(iOS本地html页面使用锚点定位)