0

「#」を含む URL 文字列があります。たとえば、

NSString* urlStr = @"https://developer.apple.com/library/ios/#/legacy/library/documentation/Xcode/Conceptual/ios_development_workflow/10-Configuring_Development_and_Distribution_Assets/identities_and_devices.html#//apple_ref/doc/uid/TP40007959-CH4-SW";
urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL* url = [NSURL URLWithString:urlStr];
[[self.webViewSample mainFrame] loadRequest:[NSURLRequest requestWithURL:url]];

エンコーディングを使用した後、「#」は「%23」に置き換えられます。エンコーディングを使用しない場合、NSURL は nil になります。私の問題は、webview がブラウザとは異なる誤った Web ページをロードすることです。正しい Web ページをロードできるように、この URL 文字列を処理するにはどうすればよいですか?

4

4 に答える 4

2

このようにしてみて、

それは仕事#に置き換えます/#

UIWebView *web=[[UIWebView alloc]initWithFrame:CGRectMake(0, 0, 320, 480)];
    NSString* urlStr = @"https://developer.apple.com/library/ios//#/legacy/library/documentation/Xcode/Conceptual/ios_development_workflow/10-Configuring_Development_and_Distribution_Assets/identities_and_devices.html/#//apple_ref/doc/uid/TP40007959-CH4-SW";
    urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSURL* url = [NSURL URLWithString:urlStr];
    [web loadRequest:[NSURLRequest requestWithURL:url]];
    [self.view addSubview:web];

ここに画像の説明を入力

于 2013-05-02T11:08:09.917 に答える
2

あなたの質問から私が思うに、根本的な問題は、Apple のドキュメントがかなり奇妙な形式の URL を使用していることです。複数の#文字が含まれているため、URL として技術的に有効ではありません。1 つ目は有効 (かつ重要) です。それ以外はエスケープする必要があります。

Safari はこれを処理できます。生の URL 文字列を表示/使用するだけではないためだと思います。私がこれまでに見つけた最善の解決策はWebView、次のように のペーストボード処理を引き継ぐことです。

- (NSURL *)URLFromString:(NSString *)string;
{
    static NSPasteboard *pboard;
    if (!pboard) pboard = [[NSPasteboard pasteboardWithUniqueName] retain];

    [pboard clearContents];
    [pboard writeObjects:@[string]];

    NSURL *result = [WebView URLFromPasteboard:pboard];
    return result;
}

詳細はhttp://www.mikeabdullah.net/webkit-encode-unescaped-urls.htmlをご覧ください

于 2013-05-03T14:44:39.890 に答える
1

問題の根本は、Apple のドキュメンテーション リンクが有効な URL ではないことです。そのため、NSURL は想定どおりに動作し、そこから URL を作成することを拒否します。

2 番目の # を %23 に置き換えると、NSURL は「okaaaaaaaaay」のようになり、NSURL オブジェクトが返され、Web ビューが正しいページで開きます。

于 2013-05-02T21:44:13.803 に答える