4

次の URL を使用して、ローカルの html ページと shouldStartLoadWithRequest: 内を読み込んでいます。

... /Library/Application%20Support/CDS/%3Fpid=27ce1ef8-c75e-403b-aea1-db1ae31e05cc/...

そのページ内で、ユーザーがリンクをクリックして外部 Web サイトに移動した場合、ユーザーは戻るボタンをクリックします。私のコードはそれを処理します。

if ([self.webView canGoBack])
    [self.webView goBack];

ただし、[self.webView goBack] を呼び出した結果として shouldStartLoadWithRequest: が再度呼び出されると、 shouldStartLoadWithRequest: に渡される URL が次のように変更されました。

`... /Library/Application%20Support/CDS/?pid=27ce1ef8-c75e-403b-aea1-db1ae31e05cc/..`.

つまり、OS は URL 内の「%3F」を「?」に変更しました。

shouldStartLoadWithRequest: から YES を返しますが、"%3f" が "?" になっているためです。didFailLoadWithError: が WebKitErrorDomain 102 で呼び出され、ページの読み込みに失敗するという結果になります。

ファイルには実際に ? その名前ではありますが、次のように UIWebView:loadRequest: に渡される NSURL オブジェクトを構築するプロセス中にそれを %3F に変換するのは iOS システム コールです。

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 に自動的に変換しますが、その変換がなければページの読み込みは失敗します。

誰もこれを見たことがありますか?

4

3 に答える 3

1

ファイルの URL を使用していませんが、同じ問題がありました。どうやらこれが一番の対処法らしい。

NSString *newURLString = [[origurl absoluteString] stringByAppendingPathComponent:appendedString];
NSURL *url = [NSURL URLWithString:newURLString];
于 2013-07-05T02:39:54.780 に答える
1

クエリ パラメータは、relativeToURL メソッドで追加する必要があります。次のコードを試してください。

NSURL *baseUrl = [self.baseURL URLByAppendingPathComponent:[NSString stringWithFormat:@"/api_url"]];

NSString *urlString = [[NSString stringWithFormat:@"?param1=%@&param2=%@", param1, param2] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURL URLWithString:urlString relativeToURL:baseUrl];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
于 2015-04-11T20:22:56.573 に答える
0

私はこの方法で同じ問題を解決しました:

let baseRequest = "yourURLString"

let URLRequest = NSMutableURLRequest(URL: NSURL(string: baseRequest)!)

最も重要なことは、文字列によって作成された URL として URLRequest を渡すことです。

于 2016-06-30T16:04:51.063 に答える