2011-08-21 12 views
26

Spero che tu possa aiutare un po 'qui ... Ho un modulo che traduce una parola in un campo, popola il campo con il termine tradotto e poi fai l'azione tutto in un invio pulsante.Apri la pagina in una nuova finestra senza bloccare i popup

l'invio è stato effettuato da jquery. problema è che la pagina di destinazione viene bloccata come tutti e 3 i principali browser lo trattano come popup, Sai come farlo aprire come una nuova scheda o nuova finestra? Non voglio impostare il target come _self come voglio che le persone abbiano anche il mio sito aperto.

Credo che il problema è in questa stringa:

document.forms.form1.submit(); 

ma so anche che ci dovrebbe essere un modo per riformulare in modo che il bersaglio non sarà trattato come un popup.

Questo è lo script:

<script type="text/javascript"> 

$(function transle() { 
    $('#transbox').sundayMorningReset(); 
    $('#transbox input[type=button]').click(function(evt) { 
    $.sundayMorning(
     $('#transbox input[type=text]').val(), { 
     source: '', 
     destination: 'ZH', 
     menuLeft: evt.pageX, 
     menuTop: evt.pageY 
     }, 
     function(response) { 
     $('#transbox input[type=text]').val(response.translation); 

     //document.getElementById("form1").submit(); 
     document.forms.form1.submit(); 

     } 
    ); 
    }); 
}); 

</script> 

e questa è la forma:

<table id="transbox" name="transbox" width="30px" border="0" cellspacing="0" cellpadding="0"> 
    <form action="custom-page" method="get" name="form1" target="_blank" id="form1"> 

    <tr> 
     <td> 
     <input id="q" name="q" type="text" class="search_input" onFocus="if (this.value == 'Evening dress') {this.value = '';}" onBlur="if (this.value == '') {this.value = 'Evening dress';}" value="Evening dress" /> 
     </td> 
     <td> 
     <input type="button" value="Find" style="color: #333; width: 157px; font-weight:bold"></input> 
     </td> 
    </tr> 

    </form> 
</table> 

EDIT

Ho provato tutte queste stringhe di presentare:

document.getElementById("form1").submit(); 
document.forms.form1.submit(); 
form1.submit(); 

tutto finisce con il popup bloccato. per favore, c'è qualche altro modo in cui dovrei fare il codice per non lasciarlo popup?

forse dovrebbe usare l'onsubmit per creare jQuery? qualcuno sa come?

+0

Funziona con il blocco popup disattivato. Inoltre puoi usare $ ("# form1"). Submit(); per inviare il modulo anziché document.forms.form1.submit(); –

+0

sì, quando approvo i popup non ci sono problemi. anche se è stato inviato dal pulsante di invio e jquery non è considerato come popup. –

+0

Prova e chiama $ ("button"). Click() sul pulsante di invio. –

risposta

-2

tenta di inviare il modulo ad una nuova finestra (set target="new") questo sarebbe aprire la pagina presentata in una nuova finestra, ancora una volta la sua non è possibile evitare il browser ..

+0

Hi._new viene bloccato anche ... –

+0

non è possibile evitare che il browser blocchi i popup .. è possibile identificare lo stato e avvisare l'utente che la pagina richiede che il blocco popup sia disabilitato per funzionare correttamente. Ecco un link che può aiutare a identificare il blocco dei popup http://www.jguru.com/faq/view.jsp?EID=1157429 –

9

Come regola generale, pop-up bloccanti finestre di destinazione che vengono lanciate senza interazione dell'utente. Solitamente un evento click può aprire una finestra senza che sia bloccato. (A meno che non si tratta di una pessima popup blocker)

provare ad avviare dopo un evento click

5

Per il pulsante Invia, aggiungere questo codice e quindi impostare il vostro obiettivo form = "newwin"

onclick=window.open("about:blank","newwin") 
61

Un browser aprirà solo una scheda/popup senza l'avviso di blocco popup se il comando per aprire la scheda/popup proviene da trusted event. Ciò significa che l'utente deve cliccare attivamente da qualche parte per aprire un popup.

Nel tuo caso, l'utente esegue un clic in modo da avere l'evento attendibile. Perdi quel contesto attendibile, tuttavia, eseguendo la richiesta Ajax. Il tuo gestore di successo non ha più quell'evento. L'unico modo per aggirare questo è eseguire una richiesta Ajax sincrona che bloccherà il browser durante l'esecuzione, ma manterrà il contesto dell'evento.

In jQuery questo dovrebbe fare il trucco:

$.ajax({ 
url: 'http://yourserver/', 
data: 'your image', 
success: function(){window.open(someUrl);}, 
async: false 
}); 

Ecco la risposta: Open new tab without popup blocker after ajax call on user click

+3

Questa soluzione non sembra funzionare più. La nuova finestra non si apre e la console Web mostra l'errore: "Synchronous XMLHttpRequest sul thread principale è deprecato a causa dei suoi effetti negativi sull'esperienza dell'utente finale. Per ulteriori informazioni http://xhr.spec.whatwg.org/ " –

+0

Questa soluzione funziona sul mio browser e mostra il precedente come un avvertimento. –

5

PS> Ho postato questa risposta su una questione connessa. Ecco come ho risolto il problema della richiesta asincrona asincrona perdendo il contesto di fiducia:

Ho aperto la finestra popup direttamente sugli utenti, ho diretto l'url a about:blank e ottenuto un handle su quella finestra. Probabilmente si può indirizzare il popup a un URL 'carico', mentre la richiesta Ajax è fatto

var myWindow = window.open("about:blank",'name','height=500,width=550');

Poi, quando la mia richiesta è di successo, apro il mio callback url nella finestra

function showWindow(win, url) { 
    win.open(url,'name','height=500,width=550'); 
} 
+0

funziona anche se si desidera aprire una nuova finestra. cosa succede se l'open è condizionale in base al callback. dovremmo chiamare '.close()' e creerebbe un flash aperto/chiuso .... qualche idea? –

0
function openLinkNewTab (url){ 
    $('body').append('<a id="openLinkNewTab" href="' + url + '" target="_blank"><span></span></a>').find('#openLinkNewTab span').click().remove(); 
} 
+3

Aggiungi una spiegazione con la risposta per come questa risposta aiuta OP nel risolvere il problema corrente –

+1

Provato velocemente in scratchpad (Firefox) e (come previsto) questo ha attivato il mio blocco popup. 'openLinkNewTab ('https://ddg.gg');' – retrovertigo

Problemi correlati