我正在加载一个本地html页面并在shouldStartLoadWithRequest中:使用以下url:
... /Library/Application%20Support/CDS/%3Fpid=27ce1ef8-c75e-403b-aea1-db1ae31e05cc/...
如果用户点击链接转到外部网站,则在该页面内,然后他们点击我的代码处理的后退按钮:
if ([self.webView canGoBack])
[self.webView goBack];
然而,当调用[self.webView goBack]后,再次调用shouldStartLoadWithRequest:时,传递给shouldStartLoadWithRequest的URL已更改为:
`... /Library/Application%20Support/CDS/?pid=27ce1ef8-c75e-403b-aea1-db1ae31e05cc/..`.
即。操作系统已将URL中的“%3F”更改为“?”。
我从shouldStartLoadWithRequest返回YES:但由于“%3f”转向“?”导致使用WebKitErrorDomain 102调用didFailLoadWithError:并且页面无法加载。
文件实际上有?在它的名称中,它是iOS系统调用,在构建传递给UIWebView的NSURL对象的过程中将其转换为%3F:loadRequest:如下所示
NSURL *fullURL = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask
appropriateForURL:nil
create: YES
error:&err];
fullURL = [fullURL URLByAppendingPathComponent:folderLocation isDirectory:YES];
fullRUL = [fullURL URLByAppendingPathComponent: pageToLoad isDirectory:NO];
NSURLRequest *requestObj = [NSURLRequest requestWithURL: fullURL];
[self.webView loadRequest:requestObj];
folderLocation是一个包含?的NSString,对URLByAppendingPathComponent的调用会自动将其转换为%3F,而不进行该转换,页面加载失败。
以前是否有人见过这个?
答案 0 :(得分:1)
我没有使用文件网址,但我遇到了同样的问题。 看起来这是处理它的最佳方式。
NSString *newURLString = [[origurl absoluteString] stringByAppendingPathComponent:appendedString];
NSURL *url = [NSURL URLWithString:newURLString];
答案 1 :(得分:1)
必须使用relativeToURL方法添加查询参数。 请尝试以下代码;
NSURL *baseUrl = [self.baseURL URLByAppendingPathComponent:[NSString stringWithFormat:@"/api_url"]];
NSString *urlString = [[NSString stringWithFormat:@"?param1=%@¶m2=%@", param1, param2] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:urlString relativeToURL:baseUrl];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
答案 2 :(得分:0)
我以这种方式解决了同样的问题:
let baseRequest = "yourURLString"
let URLRequest = NSMutableURLRequest(URL: NSURL(string: baseRequest)!)
最重要的是将URLRequest作为由String创建的URL传递。