【问题标题】:UIWebview load request fails if URL has a fragment identifier (#)如果 URL 具有片段标识符 (#),则 UIWebview 加载请求失败
【发布时间】:2016-07-29 16:15:20
【问题描述】:

我的应用显示使用专门关键字的信息。当用户触摸这些关键字之一时,应用程序会打开一个 UIWebView,其中提供有关该关键字的其他信息。下面是创建 UIWebview 的代码:

NSURLRequest * request = [NSURLRequest requestWithURL: currentURL] ;
webView = [[UIWebView alloc] initWithFrame: frame];
webView.scalesPageToFit=YES;
[webView setDelegate: self];
[webView loadRequest:request];

对于简单的 URL “chapter5.html”,一切正常,但如果 URL 具有片段标识符“chapter5.html#section3”,则页面根本不会打开——甚至在第 5 章的开头也不会。

我猜它试图将整个内容用作文件名并失败,因为不存在这样的文件。如果我去掉片段标识符,页面会显示,但不在正确的位置。有没有办法

  • 让 loadRequest 接受片段标识符,或者
  • 在没有片段标识符的情况下执行 loadRequest,然后将位置调整为片段标识符的位置?

【问题讨论】:

    标签: ios uiwebview


    【解决方案1】:

    您必须拆分片段标识符(hashTag),然后将 URL 的其余部分提供给 UIWebview。你可以这样做:

    NSRange range = [url rangeOfString: @"#"];
    if (range.location == NSNotFound) {
        hashTag = nil;
    }
    else {
        hashTag = [url substringFromIndex: range.location];
        url = [url substringToIndex:range.location];
    }
    

    然后您将 viewController 设置为 UIWebViewDelegate 并等待被告知页面已加载。加载后,您可以使用 javascript 命令转到 hashTag 指定的位置:

    - (void) webViewDidFinishLoad: (UIWebView *) localWebView {
    
        if (hashTag != nil) {
            NSString * javaScript = [[NSString alloc] initWithFormat: @"window.location.hash = '%@'", hashTag];
            [webView stringByEvaluatingJavaScriptFromString:javaScript];
            hashTag = nil;
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-20
      相关资源
      最近更新 更多