【问题标题】:Force link to open in mobile safari from a web app with javascript强制链接从带有 javascript 的 Web 应用程序在移动 Safari 中打开
【发布时间】:2011-12-17 07:36:53
【问题描述】:

在 iOS 网络应用程序中调用 window.open() 时,页面会在网络应用程序而不是移动 safari 中打开。

如何强制网页在移动 Safari 中打开?

注意:不能直接使用<a href> 链接。

【问题讨论】:

标签: javascript ios web-applications mobile-safari iphone-standalone-web-app


【解决方案1】:

这是可能的。使用 iOS5 独立网络应用测试:

HTML:

<div id="foz" data-href="http://www.google.fi">Google</div>

JavaScript:

document.getElementById("foz").addEventListener("click", function(evt) {
    var a = document.createElement('a');
    a.setAttribute("href", this.getAttribute("data-href"));
    a.setAttribute("target", "_blank");

    var dispatch = document.createEvent("HTMLEvents");
    dispatch.initEvent("click", true, true);
    a.dispatchEvent(dispatch);
}, false);

可以在这里测试:http://www.hakoniemi.net/labs/linkkitesti.html

【讨论】:

  • @Napalm 确保在行尾添加分号var dispatch = ...
  • 不应该是&lt;div id="foz" data-href="http://www.google.fi"&gt;Google&lt;/div&gt; - 打开&lt;div&gt; 并用&lt;/a&gt; 关闭它没有多大意义。最后的&lt;/li&gt; 是什么?
  • 在 Facebook 应用浏览器中对我不起作用。我确实修复了分号@laker。
  • 致我的上一条评论:iOS 10.1,示例工作正常,但是当我尝试通过单击 webgl 按钮而不是 div 来调用它时 - 没有任何反应。要解决它,只需删除 "a.setAttribute("target", "_blank");"并使用 a.dispatchEvent(new MouseEvent("click", {'view': window, 'bubbles': true, 'cancelable': true}););。它会打开一个新的 Safari 窗口。绝对不知道为什么在这种情况下不需要 target=_blank。
  • 这在 iOS 11 中对我不起作用。它只是打开嵌入式 UIWebView 中的链接。
【解决方案2】:

事实证明,不可能使用 JavaScript window.open() 转义 iOS 网络应用程序。如果您想在移动 Safari 中打开链接,您必须使用 &lt;a href&gt; 链接。

【讨论】:

【解决方案3】:

Vue 实现。希望会有所帮助。

<template>
<div @click='handler()'>{{ text }}</div>
</template>

<script>
export default {
  props: {
    href: String,
    text: String,
  },
  methods: {
    handler() {
      const a = document.createElement('a')
      a.setAttribute('href', this.href)
      a.dispatchEvent(new MouseEvent("click", {'view': window, 'bubbles': true, 'cancelable': true}))
    }
  }
}
</script>

【讨论】:

    【解决方案4】:

    如果您使用不同的子域或使用 http 而不是 https,则可以强制 iOS 在 safari 中使用 window.open() 从 PWA 打开链接。

    以 example.com 为例

    window.open('http://example.com','_blank')
    

    注意:一旦在浏览器中打开,我的服务器会将 http 重定向到 https。所以没有安全问题。

    (或)

    window.open('api.example.com','_blank')
    

    【讨论】:

      猜你喜欢
      • 2021-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-20
      • 2018-01-04
      • 1970-01-01
      • 2014-04-23
      • 1970-01-01
      相关资源
      最近更新 更多