4

HTML形式の説明テキストを受け取り、リンクが説明をクリックした場合はWebビューにロードしているので、別のViewControllerにロードします。しかし、shouldStartLoadWithRequestはいくつかの追加リンクを提供します。これが私のコードです

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
if(navigationType == UIWebViewNavigationTypeLinkClicked) {

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    WebsiteViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"WebsiteViewController"];
    vc.url = request.URL.absoluteString;
    NSLog(@"link is : %@", [[request URL] absoluteString]);
    [self.navigationController pushViewController:vc animated:YES];
    return false;
}
return true;
}

これを印刷します

link is : applewebdata://038EEEBF-A4C9-4C7D-8FB5-32056714B855/www.yahoo.com

そして私はそれをこのようにロードしています

[webViewDescription loadHTMLString:description baseURL:nil];
4

2 に答える 2

20

使用していてnilloadHTMLStringに設定しているため、iOSでは、デバイスの内部リソースへのアクセスに使用されるURIの「http」の代わりにapplewebdataURIスキームが使用されます。設定してみてくださいbaseURLbaseURL

于 2013-03-12T10:37:03.763 に答える
7

同様の問題がありました。実際には、baseURL「http://」などを設定してもうまくいきませんでした。applewebdataまた、私はそのスキームを約50%の時間しか見ませんでしたが、残りの50%は私が期待していた正しいスキームを見ました。

これを解決するために、私は結局、-webView:shouldStartLoadWithRequest:navigationType:コールバックを傍受し、正規表現を使用してAppleのapplewebdataスキームを取り除いた。これが最終的にどのように見えるかです

// Scheme used to intercept UIWebView callbacks
static NSString *bridgeScheme = @"myCoolScheme";

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    BOOL shouldStartLoad = YES;

    NSURL *requestURL = request.URL;

    // Strip out applewebdata://<UUID> prefix applied when HTML is loaded locally
    if ([requestURL.scheme isEqualToString:@"applewebdata"]) {
        NSString *requestURLString = requestURL.absoluteString;
        NSString *trimmedRequestURLString = [requestURLString stringByReplacingOccurrencesOfString:@"^(?:applewebdata://[0-9A-Z-]*/?)" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, requestURLString.length)];
        if (trimmedRequestURLString.length > 0) {
            requestURL = [NSURL URLWithString:trimmedRequestURLString];
        }
    }

    if ([requestURL.scheme isEqualToString:bridgeScheme]) {
        // Do your thing
        shouldStartLoad = NO;
    }

    return shouldStartLoad;
}
于 2015-04-12T22:41:28.287 に答える