如何从WebView打开Safari移动应用中的链接

jos*_*405 6 html javascript browser safari webview

这里有很多主题,但是它们都需要本机代码交互才能起作用。

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

我试过了:

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

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

并基于这篇文章

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

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

但没有任何效果。

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

Goo*_*yen 7

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

(HTTP) — http://websiteurl (HTTPS) — https://websiteurl x-web-search:// (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 上修复了此问题,这不再有效!


Apr*_*Ori 0

如果它在 safari 中运行,则应遵守有关弹出窗口的 safari 异步调用限制,如此处所述

您应该修复您的代码,以便打开的窗口位于函数之外,类似这样:

    <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>
Run Code Online (Sandbox Code Playgroud)