Как я могу запустить почтовый клиент, а затем выполнить перенаправление страницы с JavaScript?

StackOverflow https://stackoverflow.com/questions/2192860

  •  25-09-2019
  •  | 
  •  

Вопрос

Я обязан сделать функцию веб-сайта точно так же на других браузерах, как это происходит в 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. Как я могу добиться этого эффекта (открытие почтового клиента, а затем выполнение страницы Redirect) последовательно через браузеры?
Как отмечают, я также пытался выполнить это, используя Meta Refresh, но был неудачным.

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

Это сказано, интересно, становится ли все более надежно, если вы ввели задержку:

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

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

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

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

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

location.href="mailto:test@test.com&body=Hello!";
setTimeout(function(){ location.href = 'newPage.html' },  500);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top