【问题标题】:How to trap custom URL scheme from a webview?如何从 web 视图中捕获自定义 URL 方案?
【发布时间】:2012-01-05 10:22:41
【问题描述】:

在我的应用程序中,我有一个 webview,它加载一个包含普通链接和自定义 URL 方案的页面,例如 myapp://id=1234。

现在,我正试图在这个函数中捕获请求:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request 
 navigationType:(UIWebViewNavigationType)navigationType{

    NSLog(@"NSURLRequest = %@", [[request URL] absoluteString]);

}

打印出上面的网址给了我这个:

http://localhost:8888/myapp://id=1234

这是我在 MAMP 上的 localhost 设置,并在 URL 后附加了自定义 URL。

我曾希望我可以直接使用 [request scheme],但在这种情况下,它只是返回“http”。有没有一种方法可以让我在自己的应用程序中处理自定义 URL 方案?

此时,我希望能够做到以下几点:

  1. 用户正在浏览网页
  2. 用户点击自定义 url 链接 (myapp://id=1234)
  3. 我的应用处理自定义 url 并将用户定向到另一个页面 (http://www.someotherpage.com/?id=1234)

谢谢!

【问题讨论】:

    标签: iphone nsurl nsurlrequest


    【解决方案1】:

    当一个 URL 在冒号后面有一个双斜杠时,就像你的一样,下一部分应该看起来像 userinfo@hostname:portuserinfo@:port 都可以省略)。由于id=1234 看起来不像主机名,因此 URL 解析器不会将您的 URL 识别为绝对 URL。因此 URL 解析器将其视为相对 URL。

    尝试将您的 URL 语法更改为 myapp:id=1234myapp:///id=1234

    【讨论】:

    • 谢谢你,不幸的是,使用该方案仍然返回http。简单地使用字符串比较来确定“myapp://”是否存在,然后执行操作是否是不好的做法?
    【解决方案2】:

    我猜你应该声明任何由你的应用程序处理的自定义 URL 方案。

    Check reference

    【讨论】:

    • 谢谢,这不是为了注册你的应用程序以被另一个应用程序调用吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 2014-04-02
    • 2012-06-15
    • 2011-04-30
    • 2014-10-22
    • 2011-12-14
    相关资源
    最近更新 更多