如果我在网页中显示指向地图的链接
<a href="http://maps.apple.com/?q=Pricketts+Hill+Southampton+Hampshire+SO32+2JW&ll=50.913127,-1.191398">Location</a>
在标准 iPhone Safari 浏览器中单击它会打开原生 iOS6 Apple Maps 应用程序。当我在我的应用程序内的 UIWebView 中显示相同的网页然后单击链接时,我的委托方法
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
被调用,参数为
url=http://maps.apple.com/?q=Pricketts+Hill+Southampton+Hampshire+SO32+2JW&ll=50.913127,-1.191398
navigationType=UIWebViewNavigationTypeLinkClicked
如果delegate方法返回YES
指示UIWebView应该继续打开链接,则立即触发对delegate的新调用,此时参数为
url=http://maps.google.com/?q=Pricketts+Hill+Southampton+Hampshire+SO32+2JW&ll=50.913127,-1.191398
navigationType=UIWebViewNavigationTypeLinkClicked
回到YES
这个,可以预见的是,maps.google.com 网页会在我的 UIWebView 中打开。但我确实希望启动 iOS6 Apple Maps 应用程序。我可以尝试从 URLCLGeocoder
创建一个MKMapItem
,按照如何在 iOS 6 中使用特定地址启动 iOS 地图应用程序?,但CLGeocoder
似乎想要纯文本而不是带有所有常规注释的 url,这是一项非常详细的解析工作。如果我解析 URL 的方式与 Mobile safari 的解析方式不同,那么我可能会看到不同的地图结果,具体取决于我是通过 UIWebView 还是 Safari 从相同的初始链接到达 Maps 应用程序。
有没有办法让 UIWebView 从链接打开 iOS6 Apple Maps 应用程序,而无需解析然后对 URL 进行地理编码?
顺便说一句,在使用 maps.google.com url 调用我的委托方法后,它会使用以下参数调用两次:
url=about:blank
navigationType=UIWebViewNavigationTypeOther
并且最终对显示没有影响。知道那是什么吗?