我有一个嵌入在我的iPhone应用程序中的UIWebView.我希望能够将该webview中的某些链接打开到完整的Mobile Safari应用程序中(即不是我的嵌入式版本).
是否有一种简单的方法来构建我的一些href来强制执行此操作,而不是在我的嵌入式webview中打开每个链接?
谢谢.
为了扩展Randy所说的内容,我在我的应用程序中使用这个来在外部Safari或Mail应用程序中打开每个http://,https://和mailto:// URL:
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; { NSURL *requestURL =[ [ request URL ] retain ]; if ( ( [ [ requestURL scheme ] isEqualToString: @"http" ] || [ [ requestURL scheme ] isEqualToString: @"https" ] || [ [ requestURL scheme ] isEqualToString: @"mailto" ]) && ( navigationType == UIWebViewNavigationTypeLinkClicked ) ) { return ![ [ UIApplication sharedApplication ] openURL: [ requestURL autorelease ] ]; } [ requestURL release ]; return YES; }
正如Randy所说,你需要在你设置为UIWebView的委托的任何类中实现它.要只有选择的URL启动Safari,您可以将他们的方案从http://更改为safari://或类似的东西,并且只将这些URL发送到系统(在用http://替换自定义URL方案之后) .
我在我的内部帮助文档中执行此操作,该文档是在UIWebView中显示的HTML,因此在我的应用程序中嵌入了通用Web浏览器时,我不会在审阅过程中遇到问题.
好,我知道了.也许它不是完美的解决方案,但你可以这样做:
只在你的WebViewController.m
:
将该行添加webView.delegate = self;
到该viewDidLoad
过程:
- (void)viewDidLoad { webView.delegate = self; .... your code .... }
然后你可以像上面描述的那样在 Controller.m
文件后面的布尔结果函数中添加:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { if (navigationType == UIWebViewNavigationTypeLinkClicked) { [[UIApplication sharedApplication] openURL:request.URL]; return false; } return true; }
我自己没试过,但我认为你可以实现UIWebViewDelegate方法
webView:shouldStartLoadWithRequest:navigationType
只要单击UIWebView中的链接,就会调用它.在该方法中,您只需要确定点击的链接是否应该导致启动Safari,如果应该,则使用openURL.
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { // Check if this was a click event and then some other criteria for determining if you want to launch Safari. if (navigationType == UIWebViewNavigationTypeLinkClicked && [Some other criteria]) { [[UIApplication sharedApplication] openURL:request.URL]; // Return false to indicate to the UIWebView to not navigate to the linked target return false; } // Return true so that the UIWebView loads the link target return true; }
不要忘记您需要将UIWebView委托属性设置为实现UIWebViewDelegate的类的实例.