最近在为公司一个老项目加一个小功能,功能需求是要在登录界面上,根据登录错误提示码跳转到一个本地错误指引的html页面。
首先当然是编辑该html页面增加锚点,也就id=错误码,然后在登录失败后直接路径加上"#错误码"就可以直接跳转到相应的错误码页面。
然而我在为原来的路径加上#错误码并不起作用,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