Принудительно открывать ссылку в мобильном сафари из веб-приложения с помощью JavaScript - PullRequest
35 голосов
/ 28 октября 2011

При вызове window.open() в веб-приложении iOS страница открывается в веб-приложении вместо мобильного сафари.

Как заставить веб-страницу открыться в мобильном сафари?

Примечание: использование прямых ссылок <a href> не вариант.

Ответы [ 4 ]

63 голосов
/ 12 января 2012

Это возможно. Протестировано с автономным веб-приложением 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

9 голосов
/ 03 ноября 2011

Оказывается, НЕ ВОЗМОЖНО , чтобы выйти из веб-приложения iOS с помощью JavaScript window.open().Если вы хотите, чтобы ссылка открывалась в мобильном сафари, вам нужно использовать <a href> ссылки.

1 голос
/ 19 ноября 2018

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>
0 голосов
/ 05 ноября 2018

Вы можете заставить iOS открывать ссылку из PWA в сафари, используя window.open (), при условии, что вы используете другой поддомен или используете http вместо https.

Например, для take example.com

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

Примечание. Мой сервер будет перенаправлять http на https после открытия в браузере.Так что проблем безопасности нет.

(или)

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