Открыть страницу в новом окне без блокировки всплывающих окон - PullRequest
36 голосов
/ 21 августа 2011

Надеюсь, вы можете немного помочь здесь ... У меня есть форма, которая переводит слово в поле, заполняет поле переведенным термином, а затем отправляет действие одним нажатием кнопки.

отправка отправляется jquery. проблема в том, что целевая страница блокируется, так как все 3 основных браузера считают ее всплывающим Вы знаете, как открыть его как новую вкладку или новое окно? Я не хочу устанавливать цель как _self, так как я хочу, чтобы люди также открывали мой сайт.

Я считаю, что проблема в этой строке:

document.forms.form1.submit();

но я также знаю, что должен быть способ перефразировать его, чтобы цель не рассматривалась как всплывающее окно.

это скрипт:

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

и это форма:

<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

Я попробовал все эти строки для отправки:

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

все заканчивается тем, что всплывающее окно цели блокируется. пожалуйста, есть ли другой способ сделать код, чтобы он не всплывал?

может, стоит использовать onsubmit для создания jQuery? кто-то знает как?

Ответы [ 6 ]

74 голосов
/ 27 ноября 2013

Браузер будет открывать вкладку / всплывающее окно без предупреждения блокировщика всплывающих окон, если команда на открытие вкладки / всплывающего окна поступает из доверенного события .Это означает, что пользователь должен активно щелкнуть где-нибудь, чтобы открыть всплывающее окно.

В вашем случае пользователь выполняет щелчок, чтобы у вас было доверенное событие.Однако вы потеряете этот доверенный контекст, выполнив запрос Ajax.Ваш обработчик успеха больше не имеет этого события.Единственный способ обойти это - выполнить синхронный Ajax-запрос, который заблокирует ваш браузер во время его работы, но сохранит контекст события.

В jQuery это должно помочь:

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

Вот ваш ответ: Открыть новую вкладку без блокировщика всплывающих окон после вызова ajax при нажатии на пользователя

10 голосов
/ 22 августа 2011

Как правило, всплывающие окна блокируются для окон, запускаемых без участия пользователя.Обычно событие щелчка может открыть окно, не блокируя его.(если это действительно плохой блокировщик всплывающих окон)

Попробуйте запустить после события щелчка

6 голосов
/ 19 октября 2015

PS> Я разместил этот ответ на связанный вопрос.Вот как я обошел вопрос о том, что мой асинхронный ajax-запрос теряет доверенный контекст:

Я открыл всплывающее окно непосредственно по клику пользователя, направил URL-адрес на about:blank и получил дескриптор этого окна.Возможно, вы могли бы направить всплывающее окно на URL-адрес «загрузки», пока выполняется ваш запрос ajax

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

Затем, когда мой запрос был успешным, я открываю свой URL обратного вызова в окне

function showWindow(win, url) {
     win.open(url,'name','height=500,width=550');
}
5 голосов
/ 09 мая 2018

Это единственный, который действительно работал для меня во всех браузерах

let newTab = window.open(); newTab.location.href = url;

4 голосов
/ 07 декабря 2012

Для кнопки «Отправить» добавьте этот код, а затем установите цель формы = «newwin»

onclick=window.open("about:blank","newwin") 
0 голосов
/ 26 декабря 2016
function openLinkNewTab (url){
    $('body').append('<a id="openLinkNewTab" href="' + url + '" target="_blank"><span></span></a>').find('#openLinkNewTab span').click().remove();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...