2014-04-24 18 views
23

Abbiamo un problema sulla nostra rete con dispositivi iOS (ipad, iPhone, ecc.): Dopo la connessione al SSID, l'iphone/ipad apre immediatamente Captive Network Assistant (CNA) - è come un browser ridimensionato senza pulsanti di navigazione, ecc. - mostra la nostra pagina di benvenuto (pronta per l'utente per autenticare il suo MAC in rete per fornirgli internet). Questo CNA è una funzionalità di iOS e si verifica automaticamente.Popup Captive Wifi: fare clic su un collegamento per aprire Safari

Stavo guardando in giro su questo forum come far aprire all'utente il suo browser Safari facendo clic su un collegamento (mentre si trovava nella CNA), inviandolo quindi dalla CNA e in Safari (che è dove preferirei che fosse lui a essere).

ho cercato frasi come: "Come impostare un collegamento per aprire in Safari", ma ottengo risultati circa le persone che utilizzano PhoneGap di fare una cosa del genere ...
Un utente ha parlato usando window.open (myURL, '_system') ma non so se questo risolva il mio problema.

Fondamentalmente il mio piano è: - La pagina di benvenuto (la pagina visualizzata dopo che l'utente si è connesso al mio SSID) rileva il tipo di browser del dispositivo dell'utente. La mia pagina di benvenuto è ospitata in un sito che si trova nel Walled Garden del mio controller, quindi ogni dispositivo può vedere quella pagina di benvenuto (indipendentemente dal fatto che abbia accesso a Internet completo o no). - Se l'utente ha un dispositivo iOS, il browser CNA si apre automaticamente. Il mio controller rileva che il dispositivo ha un browser CNA e carica una pagina semplice con il messaggio (come): "clicca qui per iniziare a navigare" - Durante i pochi secondi successivi (mentre l'utente sta digerendo il messaggio), il mio controller accesso a Internet completo MAC dell'utente - Quando l'utente fa clic su quel collegamento nel browser CNA, il CNA si chiude e quindi apre Safari, e obbliga anche Safari ad aprire la pagina di benvenuto di destinazione (dove desidero essere il mio utente, a seconda dell'antenna che ha collegato).

Spero davvero che tutto ha un senso ...

Ho trovato questo link sul browser CNA in questo forum: Bypasses Apple Captive Network Assistant Login in iOS 7

Ma si parla con l'utente aprire Safari fin dall'inizio (disabilitando la funzione CNA), "sperando" che l'utente apra Safari (piuttosto che andare direttamente a una delle sue app). Preferisco che l'utente debba "cliccare per continuare", il che rende Safari aperto e vede la mia pagina di benvenuto.

+2

mi corregga se sbaglio, ma non credo che questo è possibile a tutti. Solitamente l'unica app autorizzata ad aprire a causa di un'azione del browser è Mail o Browser predefinito. Altrimenti, le persone potrebbero forzare in modo casuale gli altri ad aprire applicazioni semplicemente perché hanno visitato una pagina web. – DaemonOfTheWest

+0

@ user3570787 Mi chiedo se l'abbia mai visto. Mirare la stessa cosa, ma bene ... Ho già visto che funziona. Penso che nessuno. – 3pic

risposta

3

Estratto da una risposta di Ryan a How can I open an external link in Safari not the app's UIWebView?

Per avere un interruttore specifico link per Safari, è sufficiente aggiungere target = "_ sistema" per il collegamento, come in

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

O per la cattura tutti i link nel tuo javascript che hanno target = "_ blank", includono jQuery e passali a window.open con il parametro "_system". Funzionerà su iOS e Android.

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

    ev.preventDefault(); 
    url = $(this).attr('href'); 
    window.open(url, '_system'); 
}); 
+2

Ho un problema simile e ho provato a utilizzare i collegamenti con target = "_ system", ma si aprono nel CNA, non in Safari. Chiunque ha funzionato? L'ho visto funzionare in un hotspot, quindi è possibile. – Tom

+5

Questa è una ** risposta ** sbagliata, mi dispiace. Questo non funziona. – 3pic

+2

Perché questo è il massimo se non è valido? –

3

JavaScript non funziona pienamente in CNA, è disabilitato per motivi di sicurezza. target = "_ system" è una funzionalità di safari, non di tipo CNA. ==> in breve, _system fallisce in CNA.

1

EDIT: questa soluzione non funziona dopo iOS 10.3.Non sono sicuro se questo è una caratteristica o un bug: https://forums.developer.apple.com/thread/75498

EDIT2: A quanto pare funziona di nuovo su iOS 11


C'è un modo semplice per farlo, se si ha il controllo sul captive portal server.

Quando ci si connette a una rete Wi-Fi, i dispositivi iOS invia una richiesta GET a un gruppo di URL predefiniti (http://www.apple.com/library/test/success.html, ...), per vedere se c'è la connessione a Internet (richieste WISPr). Il dispositivo iOS si aspetta la risposta <HTML><HEAD><TITLE>Success</TITLE></HEAD><BODY>Success</BODY></HTML>. Se la richiesta ha esito positivo, ma la risposta è diversa (ad esempio la pagina del captive portal), attiva il CNA per l'apertura.

In questa fase, la CNA pensa che tu non sia connesso e mostrerà un pulsante Cancel nella parte superiore. Ogni collegamento si aprirà all'interno del CNA e non in una finestra di Safari, indipendentemente da ciò che fai. Il CNA è fatto in modo che tu possa ottenere il tuo utente attraverso il processo di log-in. Per verificare se la procedura di accesso è stata completata e la connessione è stata stabilita, il dispositivo iOS invierà di tanto in tanto una richiesta wispr. Ciò accade ogni 40 secondi o ogni volta che viene emessa una richiesta HTTP (navigazione all'interno del CNA).

Quando il server risponde finalmente Success ad una richiesta WISPr, CNA segnerà come connected, il pulsante in alto si trasforma in Done. A questo punto, qualsiasi collegamento a un URL esterno chiuderà la CNA e aperta in Safari :)

Quindi, per riassumere, si può ottenere quello che vuoi con le seguenti operazioni di connessione:

  1. del server risponde WISPr iniziale richiesta con la tua pagina CNA.
  2. la pagina si apre in CNA. In quella pagina, hanno qualche JavaScript che fa scattare immediatamente la navigazione all'interno della CNA, per esempio: <script>window.location.reload(true)</script> questo attiverà il dispositivo iOS per inviare immediatamente una nuova richiesta WISPr
  3. server risponde questa seconda richiesta WISPr con <HTML><HEAD><TITLE>Success</TITLE></HEAD><BODY>Success</BODY></HTML>, questo innescherà la CNA per contrassegnare come collegato
  4. avere la vostra pagina di CNA per mostrare un link ad un URL esterno
+1

Gestito per ottenere l'apertura automatica di Safari inserendo un ritardo di 1 secondo nella pagina CNA. Quindi fa clic su Un elemento utilizzando clic() e si apre in Safari. L'URL è assoluto, l'obiettivo non è impostato (non funziona con _blank). Senza indugio wispr potrebbe ricevere una risposta attesa, ma i collegamenti navigano verso il CNA in un ciclo infinito. E ciò che è notevole, se inserisco un ritardo, la seconda richiesta di wispr viene prima che la navigazione del link possa essere prevista, quindi la navigazione verso il link non è il vero trigger. – OCTAGRAM

+1

dare un'occhiata: https://github.com/sebpiq/FreedomPortal/blob/master/freedomportal/handlers/ios.lua Ho implementato questo processo esatto e funziona come un fascino – sebpiq

+0

Con cose di ritardo di 1 secondo è diventato anche bene qui: https://bitbucket.org/snippets/OCTAGRAM/dBq6z – OCTAGRAM

Problemi correlati