在 iOS 7 中无法从 UIWebView 调用应用程序(URL 方案)

Posted

技术标签:

【中文标题】在 iOS 7 中无法从 UIWebView 调用应用程序(URL 方案)【英文标题】:Impossible to call application (URL Scheme) from UIWebView in iOS 7 【发布时间】:2013-10-10 16:14:36 【问题描述】:

有点奇怪的情况。我们与外部合作伙伴合作,该合作伙伴公开了一个用户可以登录的网页。该网页采用一个名为 returnURL 的参数。这个returnURL 将在成功登录到他们的服务时被调用,并且在这个返回 URL 的末尾,我们的外部合作伙伴将添加一个令牌,我们以后可以在应用程序中使用它。

因为我在 ios 中工作,作为 returnURL,我提供了我的应用程序的 URL 方案,以便在登录完成时网页可以调用它。

所以,事情是这样的。他们的网页:

http://www.theirwebpage.com/?param1=x&param2=y&returnURL=myAppsName://

我在 webview 和 application:openURL:sourceApplication:annotation: 中显示网页

问题

整个过程在 iOS 6 上运行良好,因为 webview 将调用应用程序的 URL 方案,这将触发 application:openURL:sourceApplication:annotation:

然而,application:openURL:sourceApplication:annotation: 方法在 iOS 7 中永远不会被调用。看起来更像是 webview 将自己称为myAppsName://parameters 然后失败(为了进一步解释,UIWebView 调用webView:didFailLoadWithError: 并在其NSErrorFailingURLKey我们可以找到完整的myAppsName://extraParam1=bar&token=foo)。

iOS 7 中是否发生了变化,不再允许此类调用(从 UIWebView 到应用程序本身)?

【问题讨论】:

正如您所描述的,它在 iOS 7 中适用于我,尽管当 UIWebView 尝试以自定义 URL 方案 (***.com/questions/20427009/…) 加载请求时我也会收到错误消息。您确定您已按照此处的说明在您的应用的 plist 中注册了 myAppsName 自定义 URL 方案:developer.apple.com/library/ios/documentation/iPhone/Conceptual/… 【参考方案1】:

xcode 5.0 的问题。下载 xcode 版本 5.0.1 。清理所有构建 ~/Library/Developer/Xcode/DerivedData/~ 。重新构建。

【讨论】:

以上是关于在 iOS 7 中无法从 UIWebView 调用应用程序(URL 方案)的主要内容,如果未能解决你的问题,请参考以下文章

从 Documents 目录在 UIWebview 中打开时,ios-css 和 js 无法在 html 文件中链接

iOS uiwebview 无法从 javascript 方法加载资源

无法在 iOS 的 UIWebView 中滚动

uiwebview视频无法在IOS 12.2中播放

无法在 iOS 中更改 UIWebView 的背景

iOS:在 UIWebview 中使用 javascript 调用 obj-c 方法