2011-08-21 10 views
26

Mam nadzieję, że możesz trochę pomóc ... Mam formularz, który tłumaczy słowo w polu, wypełnij pole przetłumaczonym terminem, a następnie prześlij całą akcję za jednym razem przycisk.Otwórz stronę w nowym oknie bez blokowania wyskakujących okienek

Przesłanie jest składane przez jquery. Problem polega na tym, że strona docelowa jest blokowana, ponieważ wszystkie 3 główne przeglądarki traktują ją jako wyskakującą, Czy wiesz, jak ją otworzyć, tak jak nową kartę lub nowe okno? Nie chcę ustawiać celu jako _ ja, ponieważ chcę, aby ludzie również otworzyli moją witrynę.

Wierzę, że problem jest w tym ciągu:

document.forms.form1.submit(); 

ale wiem też nie powinno być sposobem na to tak przeformułować cel nie będą traktowane jako popup.

to skrypt:

<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> 

i jest to 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

Próbowałem wszystkich tych ciągów złożyć:

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

wszystko kończy się, gdy cel jest blokowany. proszę, czy istnieje jakikolwiek inny sposób, w jaki powinienem zrobić kod, aby nie dopuścić do tego?

może powinien użyć onsubmit do tworzenia jQuery? ktoś wie jak?

+0

Czy to działa z wyłączonym blokowaniem wyskakujących okienek. Możesz także użyć $ ("# form1"). Submit(); do przesłania formularza zamiast document.forms.form1.submit(); –

+0

Tak, kiedy zatwierdzam wyskakujące okienka, nie ma problemu. również jeśli jest przesłany przez przycisk przesyłania, a nie jquery nie jest uważany za popup. –

+0

Spróbuj i zadzwoń do przycisku $ ("przycisk"). Kliknij przycisk() na przycisku przesyłania. –

Odpowiedz

-2

spróbować przesłać formularz w nowym oknie (ustawiony target="new") to byłoby otworzyć złożoną stronę w nowym oknie, znowu jej nie możliwe, aby uniknąć przeglądarkę ..

+0

Hi._new również się blokuje ... –

+0

Nie można uniknąć blokowania wyskakujących okienek w przeglądarce. Można zidentyfikować stan i powiadomić użytkownika, że ​​strona wymaga wyłączenia wyskakujących okienek w celu poprawnego działania. Oto link, który może pomóc w zidentyfikowaniu wyskakującego okienka blokowania http://www.jguru.com/faq/view.jsp?EID=1157429 –

9

Zgodnie z ogólną zasadą, pop-up blokery docelowe okna uruchamiane bez interakcji użytkownika. Zwykle zdarzenie click może otworzyć okno bez jego blokowania. (Chyba, że ​​jest to naprawdę zły popup blocker)

Spróbuj uruchomienie po zdarzeniu click

5

dla przycisku Prześlij, dodać ten kod, a następnie ustawić swój cel formularz = "NewWin"

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

przeglądarce otworzy tylko zakładkę/popup bez ostrzeżenia o blokadzie wyskakujących okienek, jeśli polecenie otwarcia karty/wyskakującego pochodzi z trusted event. Oznacza to, że użytkownik musi aktywnie kliknąć gdzieś, aby otworzyć popup.

W Twoim przypadku użytkownik wykonuje kliknięcie, aby mieć zaufane wydarzenie. Utracisz ten zaufany kontekst, wykonując żądanie Ajax. Twój przewodnik sukcesu już nie ma tego wydarzenia. Jedynym sposobem obejścia tego problemu jest wykonanie synchronicznego żądania Ajax, które zablokuje przeglądarkę podczas jej działania, ale zachowa kontekst zdarzenia.

w jQuery to powinno załatwić sprawę:

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

Oto odpowiedź: Open new tab without popup blocker after ajax call on user click

+3

To rozwiązanie nie działa już. Nowe okno nie otwiera się i konsola internetowa pokazuje błąd: "Synchroniczne XMLHttpRequest w głównym wątku jest przestarzałe ze względu na jego szkodliwe skutki dla użytkownika końcowego. Aby uzyskać więcej pomocy http://xhr.spec.whatwg.org/ " –

+0

To rozwiązanie działa w mojej przeglądarce i pokazuje powyższe informacje jako ostrzeżenie. –

5

PS> Napisałem tę odpowiedź na pytanie pokrewnej. Oto, jak poradziłem sobie z problemem mojego żądania asynchronicznego ajaxa, tracąc zaufany kontekst:

Otworzyłem okienko bezpośrednio na kliknięciach użytkowników, skierowałem adres URL pod numer about:blank i otrzymałem uchwyt w tym oknie. Prawdopodobnie mógł skierować popup do „ładowania” URL w czasie, gdy ajax wniosek został złożony

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

Potem, gdy moja prośba jest udany, otwieram mój zwrotny adres URL w oknie

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

działa to, jeśli mimo wszystko chcesz otworzyć nowe okno. co jeśli open jest warunkowe w oparciu o callback. musielibyśmy nazywać '.close()' i tworzyłby flash open/close .... jakieś pomysły? –

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

Dodaj wyjaśnienie w odpowiedzi na pytanie, w jaki sposób ta odpowiedź pomoże OP w naprawianiu bieżącego problemu. –

+1

Wypróbowałem to szybko w programie Scratchpad (Firefox) i (zgodnie z oczekiwaniami) uruchomiło to moje narzędzie do blokowania wyskakujących okienek. 'openLinkNewTab ('https://ddg.gg');' – retrovertigo

Powiązane problemy