tba*_*cos 41 iphone mobile-safari uiwebview ios
我有一个嵌入在我的iPhone应用程序中的UIWebView.我希望能够将该webview中的某些链接打开到完整的Mobile Safari应用程序中(即不是我的嵌入式版本).
是否有一种简单的方法来构建我的一些href来强制执行此操作,而不是在我的嵌入式webview中打开每个链接?
谢谢.
Bra*_*son 61
为了扩展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;
}
Run Code Online (Sandbox Code Playgroud)
正如Randy所说,你需要在你设置为UIWebView的委托的任何类中实现它.要只有选择的URL启动Safari,您可以将他们的方案从http://更改为safari://或类似的东西,并且只将这些URL发送到系统(在用http://替换自定义URL方案之后) .
我在我的内部帮助文档中执行此操作,该文档是在UIWebView中显示的HTML,因此在我的应用程序中嵌入了通用Web浏览器时,我不会在审阅过程中遇到问题.
小智 20
好,我知道了.也许它不是完美的解决方案,但你可以这样做:
只在你的WebViewController.m:
将该行添加webView.delegate = self;到该viewDidLoad过程:
- (void)viewDidLoad {
webView.delegate = self;
.... your code ....
}
Run Code Online (Sandbox Code Playgroud)
然后你可以像上面描述的那样在 Controller.m文件后面的布尔结果函数中添加:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
if (navigationType == UIWebViewNavigationTypeLinkClicked) {
[[UIApplication sharedApplication] openURL:request.URL];
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
Ran*_*mon 12
我自己没试过,但我认为你可以实现UIWebViewDelegate方法
webView:shouldStartLoadWithRequest:navigationType
Run Code Online (Sandbox Code Playgroud)
只要单击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;
}
Run Code Online (Sandbox Code Playgroud)
不要忘记您需要将UIWebView委托属性设置为实现UIWebViewDelegate的类的实例.
| 归档时间: |
|
| 查看次数: |
28791 次 |
| 最近记录: |