【问题标题】:How open link in safari mobile app from webview如何从 webview 打开 Safari 移动应用程序中的链接
【发布时间】:2018-01-04 20:14:55
【问题描述】:

这里有很多这样的话题,但都需要原生代码交互才能工作。

就我而言,必须能够直接从 url 执行此操作,而无需与我的移动应用程序进行任何交互。

我试过了:

<a href="safari://google.com" target="_blank">Open Google in Safari</a>

<a href="webkit://google.com" target="_blank">Open</a>

并且基于this post

<script>
    $(document).on('click', 'a[target="_blank"]', function (ev) {
      var url;

      ev.preventDefault();
      url = $(this).attr('href');
      window.open(url, '_system');
    });
  </script>

但没有任何效果。

有人知道如何解决这个问题吗?

【问题讨论】:

  • 我认为url scheme应该是com-apple-mobilesafari-tab://
  • 这是一个 cordova/phonegap 应用程序吗?
  • @catbadger 这无关紧要,因为我不需要来自移动应用程序的任何代码。

标签: javascript html browser webview safari


【解决方案1】:

有个窍门。我们知道 iOS Safari 有这些可用的 URL 方案:

(HTTP) — http://websiteurl (HTTPS) — https://websiteurl x-网络搜索:// (FTP) — ftp://locationtofileonftpserver

如果您使用Click here 或 window.open("http://somewebsite")。它总是使用当前浏览器打开 url。

x-web-search://?[keyword] - 它将切换到 Safari 应用程序但搜索关键字

幸运的是,我们还剩下 ftp://。它将切换到 Safari 应用程序。但首先您需要在您的主机中设置一个公共文件夹并创建一个桥接 html 文件以将用户重定向回 http:

ftp://{youripaddress}/bridge.html

window.open("https://yoururl", "_self");

现在您可以在任何浏览器的默认 Safari 应用中打开您的网站。

原答案在这里:JS - Mobile - Open Safari from any browser


更新(2021-01): Apple 似乎在 iOS 上解决了这个问题,这不再有效!

【讨论】:

  • 谢谢。使用 ftp:// 我能够在 IOS 上的应用浏览器中从 facebook 启动 Safari,但是我的 safari 无法从 FTP 读取网桥。开放式 FTP 服务器的正确配置是什么?我尝试匿名访问它,但它不起作用。我用 FileZlla 测试了 FTP,我可以匿名打开 FTP。
  • 更新(2021-01):Apple 似乎在 iOS 上修复了这个问题,这不再有效!
  • 这个问题是否在特定版本的 Safari IOS 中得到修复?目前在我的设置中工作,但我的 Safari 没有更新。有相关的官方文档吗?
  • 今天在 iOS 14.4 上测试了这个实现,它仍然对我有用。
  • iOS 15.1 损坏
【解决方案2】:

如果它在 safari 中运行,它应该遵守 safari 异步调用限制,即弹出窗口为explained here

你应该修复你的代码,这样打开的窗口就会在函数之外,像这样:

    <script>
    var windowReference = window.open();

    $(document).on('click', 'a[target="_blank"]', function (ev) {
      var url;

      ev.preventDefault();
      url = $(this).attr('href');
      windowReference.location = url;
    });
  </script>

【讨论】:

  • 这实际上是朝错误方向迈出的一步。通过将 window.open 放在 click 事件之外,您违反了在用户交互发起的线程之外的线程中打开的规则。 FWIW没关系。至少在撰写本文时使用最新的 iOS 13.1,OP 的问题仍然是不可能的。
【解决方案3】:

iOS 上没有 Safari 的 URL 方案。

查看 Apple 的文档: https://developer.apple.com/library/archive/featuredarticles/iPhoneURLScheme_Reference/Introduction/Introduction.html

搜索一下,你会看到类似的答案: What is Mobile Safari's custom URL Scheme?

【讨论】:

    猜你喜欢
    • 2016-12-20
    • 2014-12-10
    • 1970-01-01
    • 2014-04-23
    • 2012-05-10
    • 2012-08-27
    • 2013-01-07
    • 1970-01-01
    相关资源
    最近更新 更多