42 votes

Forcer le lien à s'ouvrir dans le safari mobile à partir d'une application Web avec javascript

Lorsque vous appelez window.open() dans une application Web iOS, la page s'ouvre dans l'application Web au lieu du safari mobile.

Comment puis-je forcer l'ouverture de la page Web dans Safari mobile ?

Remarque : L'utilisation de <a href> n'est pas une option.

67voto

zvona Points 4154

C'est possible. Testé avec l'application Web autonome 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);

Peut être testé ici : http://www.hakoniemi.net/labs/linkkitesti.html

9voto

Aron Woost Points 1683

Il s'avère qu'il n'est PAS POSSIBLE d'échapper à l'application Web iOS avec un code JavaScript window.open() . Si vous voulez qu'un lien s'ouvre dans le safari mobile, vous devez utiliser des liens <a href>

2voto

Implémentation de Vue. L'espoir sera utile.

 <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>

1voto

Gary Vernon Grubb Points 198

Vous pouvez forcer iOS à ouvrir un lien depuis PWA dans safari en utilisant window.open() à condition que vous utilisiez un sous-domaine différent ou que vous utilisiez http au lieu de https.

Par exemple pour exemple.com

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

Remarque : mon serveur redirigera http vers https une fois ouvert dans le navigateur. Il n'y a donc aucun souci de sécurité.

(ou)

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X