强制链接从带有 javascript 的 Web 应用程序在移动 Safari 中打开

IT技术 javascript ios web-applications mobile-safari iphone-standalone-web-app
2021-01-26 02:04:58

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

如何强制网页在 mobile safari 中打开?

注意:使用直线<a href>链接不是一种选择。

4个回答

这个有可能。使用 iOS5 独立 Web 应用程序测试:

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 = ...
2021-03-23 02:04:58
这在 iOS 11 中对我不起作用。它只是打开嵌入式 UIWebView 中的链接。
2021-03-28 02:04:58
不应该是<div id="foz" data-href="http://www.google.fi">Google</div>- 打开 a<div>并用 a 关闭它</a>没有多大意义。最后是什么</li>
2021-04-01 02:04:58
在 Facebook 应用浏览器中对我不起作用。我确实修复了分号@laker。
2021-04-06 02:04:58
对于我的上一条评论:iOS 10.1,示例工作正常,但是当我尝试通过单击 webgl 按钮而不是 div 来调用它时 - 什么也没发生。要解决它,只需删除 "a.setAttribute("target", "_blank");" 并使用 a.dispatchEvent(new MouseEvent("click", {'view': window, 'bubbles': true, 'cancelable': true}););。它会打开一个新的 safari 窗口。完全不知道为什么在这种情况下不需要 target=_blank 。
2021-04-12 02:04:58

原来它是不是可能的逃跑与一个JavaScript iOS的Web应用程序window.open()如果您想在移动 Safari 中打开链接,则必须使用<a href>链接。

关心详细说明?我想要一个 <a href> 链接来从 ios 上的 chrome/opera 打开 safari
2021-03-19 02:04:58

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>

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

例如以example.com为例

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

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

(或者)

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