我有一个UIWebView,我想要在新页面上打开所有链接。
我有这段代码来检测用户何时点击链接并在新页面上打开该链接:
- (BOOL) webView:(UIWebView*)webView shouldStartLoadWithRequest: (NSURLRequest*) request navigationType: (UIWebViewNavigationType)navigationType {
//If the user clicked a link don't load it in this webview
if (navigationType == UIWebViewNavigationTypeLinkClicked) {
NSURL* URLToGoTo = [request URL];
self.fullWebView.url = URLToGoTo;
[self.navigationController pushViewController:fullWebView animated:YES];
return NO;
}
//Else this is the webview being loaded for the first time, let it load.
return YES;
问题是某些网站使用javascript打开这样的链接:
win = window.open("/magic/card.asp?name="+cardname+"&set="+set+"&border="+border, windowName, params);
if (!win.opener)
{
win.opener = window;
}
不幸的是,这些类型的链接没有UIWebViewNavigationTypeLinkClicked属性,并且会在我的UIWebView的同一窗口中打开。
我尝试查看URL的scheme属性,看看它是否是“javascript”,但它看起来与常规链接使用的URL相同。
有人能想到一种方法来检测javascript函数何时打开网页?
我认为最糟糕的情况我可以使用布尔值来确定这是否是第一次加载我的UIWebView并在新页面中加载所有后续链接,但必须有更好的解决方案
谢谢!
答案 0 :(得分:3)
是:要捕获由Javascript引起的页面加载,您应该在navigationType == UIWebViewNavigationTypeOther
中检查webView: shouldStartLoadWithRequest:navigationType:
。
答案 1 :(得分:1)
navigationType
UIWebViewNavigationTypeOther
还会包含后台页面加载,例如分析,我认为你不想要从外部加载。
要仅检测页面导航,您需要将[request URL]
与[request mainDocumentURL]
进行比较:
- (BOOL)webView:(UIWebView *)view shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)type
{
if ([[request URL] isEqual:[request mainDocumentURL]])
{
[[UIApplication sharedApplication] openURL:[request URL]];
return NO;
}
else
{
return YES;
}
}