2011-08-21 34 views
26

Espero que pueda ayudar un poco aquí ... Tengo un formulario que traduce una palabra en un campo, rellena el campo con el término traducido y luego envía la acción todo en uno. botón.Abrir página en una nueva ventana sin ventana emergente

el envío está siendo realizado por jquery. problema es que la página de destino está siendo bloqueada ya que los 3 principales navegadores lo tratan como emergente, ¿Sabes cómo abrirlo como una nueva pestaña o una nueva ventana? No quiero establecer el destino como _self ya que quiero que las personas tengan mi sitio abierto también.

Creo que el problema está en esta cadena:

document.forms.form1.submit(); 

pero también sé que debe haber una manera de reformular lo que el objetivo no será tratada como una ventana emergente.

Este es el 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> 

y esta es 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> 

EDITAR

He intentado todas estas cadenas para presentar:

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

todo termina con el objetivo bloqueado. por favor, ¿hay alguna otra manera en que debería hacer el código para no dejar que aparezca?

¿debería utilizar el envío para hacer jQuery? alguien sabe cómo?

+0

¿Funciona con el bloqueador de pop-ups desactivado? También puede usar $ ("# form1"). Submit(); enviar el formulario en lugar de document.forms.form1.submit(); –

+0

sí, cuando apruebo las ventanas emergentes no hay ningún problema. también si se envía con el botón de enviar y no se considera que jquery es emergente. –

+0

Pruebe y llame al $ ("botón"). Haga clic en() en el botón Enviar. –

Respuesta

-2

intenta enviar el formulario a una nueva ventana (establecido target="new") esto abriría la página presentada en una nueva ventana, de nuevo no es posible evitar el navegador ..

+0

Hi._new también se bloqueó ... –

+0

no puede evitar que el navegador bloquee ventanas emergentes ... podría identificar el estado y notificar al usuario que su página necesita que se deshabilite el bloqueador de ventanas emergentes para que funcione correctamente. aquí hay un enlace que puede ayudar a identificar el bloqueador de ventanas emergentes http://www.jguru.com/faq/view.jsp?EID=1157429 –

9

Como regla general, los bloqueadores de pop-up ventanas de destino que se inician sin interacción del usuario. Por lo general, un evento de clic puede abrir una ventana sin que se bloquee. (A menos que sea un mal bloqueo de ventanas emergentes)

intente iniciar después de un evento de clic

5

Para el botón Enviar, agregue este código y luego fijar su objetivo de forma = "newwin"

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

Un navegador solo abrirá una pestaña/ventana emergente sin la advertencia del bloqueador de ventanas emergentes si el comando para abrir la pestaña/emergente proviene de un trusted event. Eso significa que el usuario tiene que hacer clic activamente en algún lugar para abrir una ventana emergente.

En su caso, el usuario hace un clic para que tenga el evento de confianza. Sin embargo, pierdes ese contexto de confianza al realizar la solicitud de Ajax. Su controlador de éxito ya no tiene ese evento. La única forma de eludir esto es realizar una solicitud síncrona de Ajax que bloqueará su navegador mientras se ejecuta, pero conservará el contexto del evento.

En jQuery esto debe hacer el truco:

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

Aquí es su respuesta: Open new tab without popup blocker after ajax call on user click

+3

Parece que esta solución ya no funciona. La nueva ventana no se abre y la consola web muestra el error: "XMLHttpRequest sincrónico en el hilo principal está en desuso debido a sus efectos perjudiciales para la experiencia del usuario final. Para obtener más ayuda http://xhr.spec.whatwg.org/ " –

+0

Esta solución funciona en mi navegador y muestra lo anterior como una advertencia. –

5

PS> he publicado esta respuesta en una pregunta relacionada. Así es como resolví el problema de mi solicitud async ajax perdiendo el contexto de confianza:

Abrí la ventana emergente directamente en el clic del usuario, dirigí la url al about:blank y obtuve un control en esa ventana. Probablemente se podría dirigir la ventana emergente para una URL 'carga', mientras que su petición Ajax se hace

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

Entonces, cuando mi petición tiene éxito, abro la URL de devolución de llamada en la ventana

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

esto funciona si desea abrir una nueva ventana de todos modos. ¿Qué pasa si el abierto es condicional basado en la devolución de llamada? Tendríamos que llamar a '.close()' y se crearía un abrir/cerrar flash .... ¿Alguna idea? –

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

Agregue algunas explicaciones con la respuesta de cómo esta respuesta ayuda a OP a solucionar el problema actual –

+1

Probé esto rápidamente en el bloc de notas (Firefox) y (como se esperaba) esto activó mi bloqueador de ventanas emergentes. 'openLinkNewTab ('https://ddg.gg');' – retrovertigo

Cuestiones relacionadas