Iphone 是否可能在UIWebView中打开弹出链接?

Iphone 是否可能在UIWebView中打开弹出链接?,iphone,objective-c,uikit,uiwebview,popup,Iphone,Objective C,Uikit,Uiwebview,Popup,我有一个UIWebView,在我的应用程序中用作嵌入式浏览器 我注意到打开新窗口的网页中的链接会被忽略,而不会调用我的代码 我试过在上中断 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 然后选择一个链接打开一个弹出窗口,断点永远不会被击中。 我能做些什么来截

我有一个UIWebView,在我的应用程序中用作嵌入式浏览器

我注意到打开新窗口的网页中的链接会被忽略,而不会调用我的代码

我试过在上中断

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
然后选择一个链接打开一个弹出窗口,断点永远不会被击中。 我能做些什么来截取弹出链接的选择,获取URL并正常加载它吗

我对在应用程序本身中显示弹出窗口不感兴趣,我只想在弹出窗口中加载的内容的URL加载到主webview本身

这可能吗


谢谢

因此,经过少量研究后,很明显UIWebView类故意忽略将在新窗口中打开的链接(通过在a标记上使用“target”元素或在onClick事件中使用javascript)

我找到的唯一解决方案是使用javascript操纵页面的html。虽然这在某些情况下有效,但它不是防弹的。以下是一些例子:

links = document.getElementsByTagName('a');
for (i=0; i<links.length; i++)
{
    links[i].target='_self';
}
links=document.getElementsByTagName('a');

对于(i=0;i我也遇到了这个问题,HTML重写是我能想到的最好的解决方案。我遇到的最大问题是,在调用webViewDidFinishLoad:方法之前,web浏览器的交互时间长达几秒钟,因此在重写之前,链接似乎会中断几秒钟

我重写了三个区域:链接、表单帖子和对window.open()的调用

我使用了与第一个代码截取类似的方法,通过迭代标记和表单来覆盖链接和表单的目标。要覆盖window.open,我使用了与以下类似的代码:

var oldWindowOpen = window.open;
window.open = function(url, sName, sFeatures, bReplace) {
  oldWindowOpen(url, '_self');
};

以下是我如何获得twitter链接的方法(即指向尝试使用新窗口打开的页面的链接):

var oldWindowOpen = window.open;
window.open = function(url, sName, sFeatures, bReplace) {
  oldWindowOpen(url, '_self');
};
-(BOOL)webView:(UIWebView *)mainWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

    if (navigationType == UIWebViewNavigationTypeLinkClicked) {
        //Allows for twitter links
        [self.mainWebView loadRequest:request];
        return NO;
    }

    return YES;

}
    WKWebViewConfiguration *theConfiguration = [[WKWebViewConfiguration alloc] init];
    theConfiguration.preferences.javaScriptCanOpenWindowsAutomatically = YES;

    webView1 = [[WKWebView alloc] initWithFrame:self.webView.frame configuration:theConfiguration];
    webView1.navigationDelegate = self;
    webView1.UIDelegate = self;
    [self.view addSubview:webView1];

    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];

    NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
        NSString *htmlString = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
        NSLog(@"htmlString: %@", htmlString);
        [webView1 loadHTMLString:htmlString baseURL:[NSURL URLWithString:@"your url"];
    }];

    [dataTask resume];