Iphone 是否可能在UIWebView中打开弹出链接?
我有一个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 然后选择一个链接打开一个弹出窗口,断点永远不会被击中。 我能做些什么来截
- (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];