Как я могу запустить клиент электронной почты, а затем сделать перенаправление страницы с помощью Javascript? - PullRequest
3 голосов
/ 03 февраля 2010

Мне нужно, чтобы веб-сайт функционировал точно так же в других браузерах, как в IE6. Часть текущего кода выглядит примерно так:

<script>
function myFunc(){
 location.href="mailto:test@test.com&body=Hello!";
 location.href="newPage.html";
}
</script>
<body onload="myFunc();">
</body>

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

Ответы [ 4 ]

7 голосов
/ 03 февраля 2010

Попробуйте использовать что-то вроде:

<a href="mailto:mail@domain.com" onclick="window.location.href='np.html'">send</a>

Вместо загрузки.

6 голосов
/ 03 февраля 2010

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

Похоже, что IE6 запустит почтовый клиент сразу после установки свойства, а затем продолжит выполнение javascript. Другие браузеры работают по-другому, и загрузка второго местоположения отменит первый.

Мне удалось обойти это в Chrome с таймером, он может работать и в других браузерах:

function myFunc(){ 
  location.href="mailto:test@test.com&body=Hello!"; 
  window.setTimeout(function () { location.href="newPage.html" }, 0); 
} 
4 голосов
/ 03 февраля 2010

В целом, я склонен думать, что настройки безопасности будут мешать вам, и рекомендую просто дать пользователю скучную старомодную ссылку mailto, по которой нужно щелкнуть.(Правка: возможно, настроена так, как предлагает Мик.)

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

function myFunc() {
    location.href = "mailto:test@test.com&body=Hello!";
    setTimeout(function() {
        location.href = "newPage.html";
    }, 500);
}
1 голос
/ 03 февраля 2010

Это будет работать, только если браузер клиента знает, какой почтовый клиент должен открываться для ссылок mailto:. Если пользователь использует веб-клиент, который не зарегистрирован в браузере, ничего не произойдет.

Кроме того, настройки безопасности могут препятствовать программному открытию ссылок mailto: или в будущем.

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

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

location.href="mailto:test@test.com&body=Hello!";
setTimeout(function(){ location.href = 'newPage.html' },  500);
...