Как открыть новое окно браузера И запустить Javascript через одно взаимодействие с пользователем? - PullRequest
0 голосов
/ 10 апреля 2010

У меня есть HTML-страница с простой формой.

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

Если я использую ссылку с target = "_ blank", я могу открыть окно результатов, но не перенаправить исходную страницу. Если я использую Javascript, чтобы попытаться открыть новое окно и затем перенаправить текущую страницу, открытие нового окна блокируется (по крайней мере блокировщиком всплывающих окон моего Firefox по умолчанию).

Есть ли способ получить новое окно и запустить Javascript на исходной странице?

Спасибо!

Ответы [ 4 ]

1 голос
/ 10 апреля 2010

Во-первых, вам нужно установить «цель» формы, которую вы отправляете, в «_blank», затем использовать событие onsubmit формы, чтобы изменить текущее местоположение следующим образом:

<form action="formResults.html" method="post" onsubmit="document.location.href='redirectPage.html'" name="MyForm" target="_blank" id="MyForm">
  <input type="submit" name="button" id="button" value="Submit" />
  <input type="text" name="textfield" id="textfield" />
</form>
0 голосов
/ 26 июля 2010

Вы должны быть в состоянии использовать что-то вроде

<script type="text/javascript">
function onSubmit() {
     if(valid()) {
         setTimeout(function() { document.location.href = 'blah' }, 100);
         return true;
     }
     return false
}
</script>

<form onsubmit="return onSubmit();" target="_blank">
...
0 голосов
/ 16 июля 2010

У меня была похожая проблема с PDF, который был сгенерирован на лету из формы. Форма была сначала проверена, а затем открыла PDF на лету в новом окне. так как этот PDF может быть открыт в окне, он не будет запускать код javascript для родителя.

Мое решение состояло в том, чтобы поместить setTimeout('gosomewhere()', 100); непосредственно перед возвратом истины; в сценарии проверки.

Тайм-аут в 100 миллисекунд должен быть достаточным, чтобы браузер открыл новое окно.

{
    setTimeout('gosomewhere()', 100);
    return true;
}

Надеюсь, это будет полезно всем, кто сталкивается с такими проблемами.

0 голосов
/ 10 апреля 2010

у вас может быть функция на родительской странице, например

function gosomewhere()
{
location.href="somewhere.html";
}

и во всплывающем окне используйте эту функцию при событии onload тела, вызовите эту функцию

function parentRedirect()
{
window.opener.gosomewhere();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...