Web视图在点击链接时不调用shouldStartLoadWithRequest

时间:2014-11-06 07:39:07

标签: ios objective-c iphone uiwebview uiwebviewdelegate

我正在使用一个Web视图,我在其中加载一个HTML页面。它具有文档,其中每个页面在开始时被赋予链接(如索引)。

要求是:点击网页浏览量内容网址时,在默认的Safari应用程序中打开该链接,即在应用程序之外。

我的问题:当我点击内容链接时,它会将其检测为超链接并在外部Safari浏览器中打开它。如果我双击主页按钮 - >选择我的应用 - >再次点击相同的链接然后它在app浏览器中显示我的内容,即向下滚动到该内容。 我正在使用shouldStartLoadWithRequest委托方法,但它没有在第二种情况下调用。

我的问题:如何实现这两个目标。如果点击某个URL,则在外部应用程序中打开它。在上面的情况下,它应该向下滚动以显示页面内容。

以下示例代码:

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
{
    switch (navigationType) {

        case UIWebViewNavigationTypeFormSubmitted:
            // request was caused by an image that's being loaded
            break;
        case UIWebViewNavigationTypeBackForward:
            // request was caused by an image that's being loaded
            break;
        case UIWebViewNavigationTypeReload:
            // request was caused by an image that's being loaded
            break;
        case UIWebViewNavigationTypeFormResubmitted:
            // request was caused by an image that's being loaded
            break;
        case UIWebViewNavigationTypeLinkClicked: {

            // user clicked on link
            [[UIApplication sharedApplication] openURL:request.URL];

            return NO;
        }
        case UIWebViewNavigationTypeOther:
            // request was caused by an image that's being loaded
            break;
    }

    return YES; 
}

任何帮助?

1 个答案:

答案 0 :(得分:0)

问题是您在重定向到safari后从shouldStartLoadWithRequest方法返回YES。要实现所需的行为,您应该在第一种情况下返回NO,然后,当用户返回应用程序并第二次单击该链接时,您应该返回YES。因为WebView加载请求只需要一次。