2015-06-11 9 views
19

Sto sviluppando un sito Web in cui gli utenti possono modificare le impostazioni che devono confermare prima di entrare in vigore.Utilizzare window.name per aprire i collegamenti nelle e-mail nella stessa scheda

La conferma è fatta da un collegamento che li mando via E-Mail. Nel codice HTML del sito web che uso questo piccolo frammento:

<script type="text/javascript">window.name="mysite";</script> 

E nei messaggi di posta elettronica HTML che uso

<a href="..." target="mysite">Click me</a> 

Ma Chrome è sempre l'apertura di nuove schede invece di tutto l'apertura in uno.

È addirittura possibile o è vietato per alcuni motivi?

+1

Ho provato ad assegnare a 'window.top.name' utilizzando il [nome contesto del browser] (http://www.w3.org/html/wg/drafts/html/master/browsers.html#browsing-context- names) spec, ma Chrome ha anche aperto una nuova scheda quando si fa clic sul link indirizzato alla mia scheda esistente. –

+1

Hai provato l'elemento ['base'] (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base)? –

risposta

8

Questa è un'idea molto interessante. Mi piace. Purtroppo, sembra che nei browser moderni non sia più possibile chiudere una finestra che non si è aperta tramite javascript. Quindi, se non ti è permesso eseguire javascript nell'e-mail, la cosa migliore che puoi fare è ridirigere la pagina originale in una pagina di ringraziamento e lasciarla in giro nella scheda del browser (ma non più in attesa di conformità). Come questo:

PleaseConfirm.html:

window.name="need_redirected"; 

Confirm.html:

var w = window.open("", "need_redirected"); 
if (w) 
    w.location="ThankYou.html"; 

Naturalmente, per il vecchio IE, sarei ancora tenta di chiudere la vecchia finestra in grazie.html :

window.top.close(); 

si può ancora provare a impostare l'obiettivo, ovviamente, nel caso in cui funziona, e si può sempre provare a mettere un oncli attributo ck sul tuo tag per lo stesso motivo:

<a href="confirm.html" target="need_redirected" onclick="window.open('confirm.html', 'need_redirected');">click here </a> 

Ma quello che sembra essere il meglio che tu possa fare. Bummer.

8

Le piattaforme di Webmail come Gmail tendono a modificare parte del codice HTML di un'e-mail per motivi di sicurezza.

Ovviamente rimuovono qualsiasi codice javascript che l'e-mail potrebbe avere. Ma cambiano anche (o aggiungono se non ne hanno) la proprietà di destinazione di ogni elemento di ancoraggio e li impostano su target="_blank" per evitare che l'utente venga rimosso da Gmail (in questo caso).

Sfortunatamente ogni piattaforma webmail ha il proprio comportamento, quindi, quello che vuoi fare non funzionerà su ogni piattaforma webmail.

Se ciò che si desidera fare è impedire all'utente di aprire più schede della stessa pagina, (* fare riferimento all'aggiornamento 1) viene in mente che è possibile utilizzare i socket Web per chiudere la scheda precedente una volta che l'utente è entrato nell'URL inviato via email. Dai un'occhiata a socket.io per esempio.

Update 1

Non c'è modo di farlo usando WebSockets. Non c'è modo di chiudere una finestra che non è stata aperta usando javascript e può essere chiusa solo dai suoi genitori.

+3

Sono interessato a come pensi che una presa di rete possa aggirare la regola che javascript non può chiudere le finestre che non hanno effettivamente aperto? –

+0

Sembra che [intercettando eventi LocalStorage si consentirebbe alla prima scheda di chiudersi quando il secondo memorizza una determinata chiave in LocalStorage] (http://stackoverflow.com/questions/28230845/communication-between-tabs-or-windows). –

+1

Hai ragione @GuySchalnat non c'è modo di farlo dopo la regola che hai detto. Sarebbe qualcosa di buono da provare, Dan. – tin

3

Nessuna delle altre due risposte lavorano, ma questo probabilmente lo farà:

  1. Nella scheda iniziale, ascoltare per un evento onstorage, con una certa chiave sta creando, ad esempio, "UserHasConfirmedEmail". Quando si verifica l'evento, window.top.close().
  2. Nella nuova scheda, creare quella chiave.

Il credito va a Tomas and his answer.

+0

Bella idea, ma le versioni più recenti dei browser impediranno a JavaScript di chiudere le schede che non erano state aperte prima da quello stesso script, sfortunatamente. Sembra che siamo stati snooker a questo punto con la questione sollevata da OP. –

Problemi correlati