Открыть страницу в новом окне без блокировки всплывающих окон
Надеюсь, вы можете немного помочь здесь...
У меня есть форма, которая переводит слово в поле, заполняет поле с помощью переведенного термина, а затем отправляйте действие в одну кнопку отправки.
подача создается jquery.
проблема заключается в том, что целевая страница блокируется, поскольку все 3 основных браузера рассматривают ее как всплывающее окно,
Вы знаете, как открыть его, как новую вкладку или новое окно?
Я не хочу, чтобы цель была как сама, так как я хочу, чтобы люди открывали мой сайт.
Я считаю, что проблема в этой строке:
document.forms.form1.submit();
но я также знаю, что должен быть способ перефразировать его, чтобы цель не рассматривалась как всплывающее окно.
это 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>
и это форма:
<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>
ИЗМЕНИТЬ
Я попробовал все эти строки:
document.getElementById("form1").submit();
document.forms.form1.submit();
form1.submit();
все заканчивается тем, что цель блокируется всплывающим окном.
пожалуйста, есть ли какой-либо другой способ, который я должен сделать, чтобы он не позволял ему всплывать?
возможно, следует использовать onsubmit для создания jQuery?
кто-то знает, как?
Ответы
Ответ 1
Браузер будет открывать только вкладку/всплывающее окно без предупреждения блокировки всплывающих окон, если команда для открытия вкладки/всплывающего окна происходит из доверенного события, Это означает, что пользователь должен активно нажать где-нибудь, чтобы открыть всплывающее окно.
В вашем случае пользователь выполняет щелчок, поэтому у вас есть доверенное событие. Однако вы теряете этот доверенный контекст, выполняя запрос Ajax. У вашего обработчика успеха больше нет этого события. Единственный способ обойти это - выполнить синхронный запрос Ajax, который заблокирует ваш браузер во время его запуска, но сохранит контекст события.
В jQuery это должно сделать трюк:
$.ajax({
url: 'http://yourserver/',
data: 'your image',
success: function(){window.open(someUrl);},
async: false
});
Вот ваш ответ: Откройте новую вкладку без блокировщика всплывающих окон после вызова ajax на клике пользователя
Ответ 2
Как правило, всплывающие блокираторы нацеливают окна, которые запускаются без взаимодействия с пользователем. Обычно событие click может открывать окно без его блокировки. (если это действительно плохой блокировщик всплывающих окон)
Попробуйте запустить после события клика
Ответ 3
Для кнопки "Отправить" добавьте этот код, а затем установите свою форму target = "newwin"
onclick=window.open("about:blank","newwin")
Ответ 4
PS > Я отправил этот ответ по соответствующему вопросу. Здесь, как я обошел проблему моего асинхронного запроса async, потерявшего доверенный контекст:
Я открыл всплывающее окно непосредственно на клике пользователей, направил 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
function openLinkNewTab (url){
$('body').append('<a id="openLinkNewTab" href="' + url + '" target="_blank"><span></span></a>').find('#openLinkNewTab span').click().remove();
}
Ответ 6
попробуйте отправить форму в новое окно (установите target="new"
), это откроет представленную страницу в новом окне, опять же ее невозможно избежать браузера.