【问题标题】:canOpenUrl and tel://canOpenUrl 和电话://
【发布时间】:2010-02-23 19:27:53
【问题描述】:

我无法理解此方法的工作原理。

从文档中,它指定:

canOpenURL:返回是否 应用程序可以打开给定的 URL 资源。

- (BOOL)canOpenURL:(NSURL *)url

参数 url 一个 URL 对象, 标识给定的资源。网址的 方案——可能是一种习惯 方案——标识哪个应用程序 可以处理 URL。

如果没有应用,则返回 NO 将接受 URL 的可用; 否则,返回 YES。

讨论 这种方法保证了 如果 openURL: 被调用,另一个 将启动应用程序来处理 它。它不保证 完整的 URL 有效。

在 iPhone 操作系统中可用 3.0 及更高版本。在 UIApplication.h 中声明

具体来说,如果是:

保证如果 openURL: 被调用,将启动另一个应用程序来处理它。

例如,如果我传入tel://HELLOWORLD,它会返回YES,而当我尝试openUrl 时,电话应用程序不会调用它。什么都没有发生,所以我假设尝试拨打号码时完整的 url 无效。

我知道它不会验证完整的 URL,但根据设计,如果我无法拨打该号码,为什么它不会向我显示错误或其他内容?

基本上我想知道的是:它确切验证了什么?

我不相信它只是检查处理程序类型和支持该特定处理程序的应用程序(例如,tel:// 在这种情况下不适用于 iPod Touch。)。

【问题讨论】:

    标签: iphone iphone-sdk-3.0


    【解决方案1】:

    验证不是此功能的目的。它只是检查是否有为此 url scheme 注册的应用程序。

    例如在 iPod touch 或 iPad 上,没有手机应用程序,因此 canOpenURL 将返回 NO 以获取 tel: 网址。

    或者,如果您要求它提供带有 foo: 方案的 url,如果用户设备安装了任何声称可以处理此方案的应用程序,它将返回 true。

    它无法验证 url,因为它对 foo 方案或下一个应用程序开发人员提出的任何方案一无所知。此时您也不想加载应用程序来验证 url。

    【讨论】:

      【解决方案2】:

      来自docs

      讨论

      这种方法保证 如果openURL: 被调用,另一个 将启动应用程序来处理 它。 不保证 完整的 URL 有效。

      【讨论】:

      • 我知道,我想我已经在问题中说清楚了。
      • 实际上只是将 URL 传递给 tel: 处理程序。
      • 事实上并非如此。如果它至少对诸如 tel: 之类的关键方案没有进行任何验证,例如,当您发送 tel:*100 时,它不会做任何事情。它应该对这些号码返回 NO,或者调用手机应用程序并出错...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-18
      • 1970-01-01
      • 2018-08-27
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多