打开新窗口时的iOS UIWebView事件

时间:2014-03-31 21:47:39

标签: ios objective-c cocoa ios7 ios6



我尝试创建一个显示webview的iOS应用程序,但我想要显示的网站在某个新窗口打开。 (window.open)我在其他设备上添加监听器并在应用程序尝试打开新窗口时执行某些操作没有问题,但在iOS上我不知道如何创建这种类型的监听器。
/> 当应用程序尝试打开新窗口时,有没有办法添加监听器并执行某些操作?

目前,当我点击带有window.open的链接时,应用程序会在顶部打开一个新的webview,无法返回旧视图。

- (BOOL)webView:(UIApplication*)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
    NSString *url = request.URL.absoluteString;
    if (navigationType == UIWebViewNavigationTypeLinkClicked && [url rangeOfString:@"........].location==NSNotFound){
        [[UIApplication sharedApplication] openURL:[request URL]];
        NSLog(@"opening link on default browser");
        return NO;
    }
    return YES;
}

- (void) webViewDidFinishLoad:(UIWebView *)webView{
    NSLog(@"webViewDidFinishLoad\n");
}

2 个答案:

答案 0 :(得分:2)

您应该做的是确定是否在外部打开网址。

您可以使用以下方法执行此操作:

- (BOOL)isExternal:(NSURL*)url {
    BOOL isExternal = NO;
    if (![url.scheme isEqual:@"http"] && ![url.scheme isEqual:@"https"]) {
        if ([[UIApplication sharedApplication] canOpenURL:url]) {
            isExternal = YES;
        }
    }
    return isExternal;
}

然后从UIWebViewDelegate,使用此方法决定是否允许加载网址:

-(BOOL)webView:(UIApplication*)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
    BOOL allowToLoad = ([self isExternal:request.URL] == NO);
    return allowToLoad;
}

答案 1 :(得分:0)

请参阅UIWebViewDelegate及其方法webView:shouldStartLoadWithRequest:navigationType:和webViewDidFinishLoad:。