Connexion wifi Popup: cliquez sur un lien pour ouvrir le Safari

nous avons un problème sur notre réseau avec les appareils iOS (ipads, iphones etc): Après la connexion au SSID, l'iphone / ipad ouvre immédiatement le Captive Network Assistant (CNA) - c'est comme un navigateur réduit sans boutons de navigation etc-qui affiche notre page d'accueil (prêt pour l'utilisateur d'authentifier son MAC dans le réseau pour lui donner internet). Cette CNA est une fonction de iOS, et se produit automatiquement.

je regardais autour de ce forum comment pour faire l'utilisateur ouvrir son navigateur Safari en cliquant sur un lien (alors que dans le CNA), ce qui l'envoie loin de la CNA et dans le Safari (qui est où je préférerais qu'il soit).

j'ai cherché des phrases telles que:" comment configurer un lien pour ouvrir en safari", mais j'obtiens des résultats sur les gens qui utilisent phonegap pour faire une telle chose...

Un utilisateur a parlé d'utiliser fenêtre.open(myURL, '_system')) mais je ne sais pas si c'est la résolution de mon problème.

Fondamentalement, mon plan est de: - Avoir ma page D'accueil (la page affichée après l'utilisateur connecté à mon SSID) détecter le type de navigateur de l'appareil de l'utilisateur. Ma page D'accueil est hébergée sur un site qui se trouve dans le jardin clos de mon contrôleur, de sorte que tous les appareils peuvent voir cette page d'accueil (qu'ils aient ou non un accès internet complet). - Si l'utilisateur dispose d'un appareil iOS, le navigateur CNA s'ouvre automatiquement. Mon contrôleur détecte que l'appareil a un navigateur CNA et charge une page simple avec le message (comme): "cliquez ici pour commencer à naviguer" - Au cours des prochaines secondes (pendant que l'utilisateur digère le message), mon contrôleur donne au MAC de L'utilisateur un accès internet complet - Lorsque l'utilisateur clique sur ce lien dans le navigateur CNA, le CNA ferme et ouvre Safari, et oblige également Safari à ouvrir la page D'accueil de la destination (où je veux que mon utilisateur soit, en fonction de l'antenne à laquelle il s'est connecté).

j'espère vraiment que tout fait sens...

I trouvé ce lien sur le navigateur CNA dans ce forum: contourne Apple Captive Network Assistant Login in iOS 7

mais il parle d'avoir L'utilisateur ouvre Safari dès le début (désactivant la fonction CNA), "espérant" que l'utilisateur ouvre Safari (plutôt que d'aller directement à l'une de ses applications). Je préfère que l'utilisateur doit "cliquer pour continuer", ce qui rend le Safari ouvert et il voit ma Page de bienvenue.

24
demandé sur Community 2014-04-25 03:18:04

3 réponses

extrait d'une réponse de Ryan à Comment puis-je ouvrir un lien externe dans Safari pas UIWebView de l'application?

pour avoir un commutateur de liaison spécifique à Safari, Il suffit d'ajouter target= "_system" à la liaison, comme dans

<a href="http://www.domain.com/" target="_system">Link Text</a>

ou pour saisir tous les liens dans votre javascript qui ont target=" _blank", incluez jQuery et passez-les à window.ouvrez avec le param' _system'. Cela fonctionnera à la fois sur iOS et Android.

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

  ev.preventDefault();
  url = $(this).attr('href');
  window.open(url, '_system');
});
3
répondu glpj 2017-05-23 10:31:36

Javascript ne fonctionne pas entièrement dans CNA, il est désactivé pour des raisons de sécurité. target="_system" est un safari , pas un CNA. = = > brièvement, _system échoue dans CNA.

3
répondu 3pic 2015-07-08 13:50:04

EDIT : cette solution ne fonctionne pas après iOS 10.3. Je ne sais pas si c'est une fonctionnalité ou un bug: https://forums.developer.apple.com/thread/75498

Edit 2 : apparemment, il fonctionne à nouveau sur iOS 11


il y a un moyen simple de le faire, si vous avez le contrôle sur le serveur de portail captif.

lors de la connexion à un réseau wifi, iOS périphériques envoyer une demande GET à un tas d'urls prédéfinies ( http://www.apple.com/library/test/success.html , ...), pour voir s'il existe une connectivité Internet (requêtes WIPR). Le dispositif iOS attend la réponse <HTML><HEAD><TITLE>Success</TITLE></HEAD><BODY>Success</BODY></HTML> . Si la requête réussit, mais que la réponse est différente (par exemple votre page de portail captive), cela déclenche l'AIIC à ouvrir.

à ce stade, L'AIIC pense que vous n'êtes pas connecté et affichera un bouton Cancel en haut. Chaque lien s'ouvrira à l'intérieur de L'AIIC et pas dans une fenêtre de Safari, quoi que vous fassiez. L'AIIC est fait de sorte que vous pouvez obtenir votre utilisateur par le processus de connexion. Afin de voir si le processus d'ouverture de session est terminé et si la connexion est finalement établie, le périphérique iOS enverra de temps en temps une autre demande wispr. Cela se produit toutes les 40 secondes, ou chaque fois qu'une requête HTTP est émise (navigation dans L'ANC).

lorsque votre serveur répond finalement Success à une requête wispr, L'ANC marquera connected , le bouton en haut se transforme en Done . À ce stade, tout lien vers une url externe fermera L'ANC et ouvrira en Safari:)

donc pour résumer, vous pouvez obtenir ce que vous voulez avec les étapes de connexion suivantes:

  1. serveur réponses initiale wispr votre demande avec votre CNA page.
  2. la page s'ouvre dans CNA. Dans cette page, avoir un certain JavaScript qui déclenche immédiatement la navigation dans L'ANC, pour exemple: <script>window.location.reload(true)</script> cela déclenchera le dispositif iOS pour envoyer immédiatement une autre demande wispr
  3. le serveur répond à cette seconde requête wispr avec <HTML><HEAD><TITLE>Success</TITLE></HEAD><BODY>Success</BODY></HTML> , ce qui déclenchera L'ANC de marquer comme connecté
  4. ayez votre page CNA pour afficher un lien à une url externe
3
répondu sebpiq 2017-08-13 22:37:57