iOS native+h5混编应用, 如果h5页面是本地文件(Bundle或Sandbox),加载时需要使用file url,而系统默认会为file url进行url encode, 例如 "?"被转义为"%3F", "#"被转义为"%23",这就造成了本地html文件无法接收接收参数,以及本地vue项目路径无法加载的问题
let document = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
let url = [URL (fileURLWithPath: "\(document)/html/index.html#/vuepath")]
print(url)
输出:
file:///Users/chaoslazy/Library/Developer/XCPGDevices/4F4277A1-0B2D-4A2D-9417-AF5879E18F7D/data/Containers/Data/Application/1D9C245F-3362-43EF-B350-0E0B8899985E/Documents/html/index.html%23/vuepath
解决这个问题只需要更改url的创建方式
Swift
let document = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
let baseUrl = URL(fileURLWithPath: "\(document)/html/index.html")
let url = URL(string: "#/vuepath", relativeTo: baseUrl)!
let request = URLRequest(url: url)
let config = WKWebViewConfiguration()
let webView = WKWebView(frame: .zero, configuration: config)
webView.load(request)
Objective-C
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
NSURL *baseURL = [NSURL fileURLWithPath:[documentPath stringByAppendingPathComponent: @"/html/index.html"]];
NSURL *htmlURL = [NSURL URLWithString:@"#/vuepath" relativeToURL:baseURL];
NSURLRequest *request = [NSURLRequest requestWithURL:htmlURL];
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:config];
[webView loadRequest:request];
网友评论