美文网首页
iOS Hybrid(混编) 加载本地html文件,如何传参

iOS Hybrid(混编) 加载本地html文件,如何传参

作者: 四十方知 | 来源:发表于2021-08-18 17:02 被阅读0次

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];

相关文章

网友评论

      本文标题:iOS Hybrid(混编) 加载本地html文件,如何传参

      本文链接:https://www.haomeiwen.com/subject/qxwgbltx.html