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

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

<script>
function myFunc(){
 location.href="mailto:[email protected]&body=Hello!";
 location.href="newPage.html";
}
</script>
<body onload="myFunc();">
</body>

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


person T.R.    schedule 03.02.2010    source источник
comment
Вы пытались изменить тег <script> на <script type="text/javascript">, чтобы увидеть, есть ли разница?   -  person Anthony Forloney    schedule 03.02.2010
comment
Какие еще браузеры? у меня на ФФ 3.5.7 работает.   -  person rodrigoap    schedule 03.02.2010
comment
да, не повезло. Но спасибо за попытку.   -  person T.R.    schedule 03.02.2010
comment
Я тестировал в Chrome. Однако у меня на этой машине не работает Firefox 3.5.1.   -  person T.R.    schedule 03.02.2010
comment
Я отредактировал свой ответ для возможного обходного пути, проверьте его.   -  person Pekka    schedule 03.02.2010


Ответы (4)


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

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

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

function myFunc(){ 
  location.href="mailto:[email protected]&body=Hello!"; 
  window.setTimeout(function () { location.href="newPage.html" }, 0); 
} 
person Andy E    schedule 03.02.2010
comment
Джинкс! Но, кажется, я опередил тебя на секунды... ;-) - person T.J. Crowder; 03.02.2010
comment
32 секунды, если быть точным, лол. Нужно больше тренировать пальцы ;-) - person Andy E; 03.02.2010
comment
Да, и он дает его тебе вместо меня. бомж. ;-) 32 секунды! Эоны! - person T.J. Crowder; 03.02.2010
comment
Хватит ныть, я опередил вас обоих на 4 минуты! :) С другой стороны, @Andy E, вы нашли время, чтобы проверить это, поэтому оценка досталась нужному человеку. - person Pekka; 03.02.2010
comment
@T.R.: И ты выбрал правильный. @Pekka: О, я согласен (насчет Энди), я просто шучу. :-) (Но для протокола: я почти уверен, что опубликовал свой ответ до того, как вы отредактировали свой.) - person T.J. Crowder; 03.02.2010
comment
@T.J.Crowder: Верно, я отредактировал свой через несколько минут, вы правы. - person Pekka; 03.02.2010
comment
@Pekka: Вы превзошли мой ответ своим редактированием, так что, должно быть, это было очень близко. У меня есть вопросы, отсортированные по старости, поэтому я отмечаю первый правильный, но я полагаю, что это не всегда работает с правками. @Т.Дж. Краудер: Я знал, что ты шутишь ;-) - person Andy E; 03.02.2010

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

<a href="mailto:[email protected]" onclick="window.location.href='np.html'">send</a>

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

person Mic    schedule 03.02.2010
comment
Сейчас это разумно. Но я бы добавил небольшую задержку перед изменением положения окна в обработчике onclick. - person T.J. Crowder; 03.02.2010
comment
Вообще говоря, я на самом деле предпочитаю это решение, но в этом конкретном случае я думаю, что мне лучше придерживаться решения на основе javascript. - person T.R.; 03.02.2010
comment
Хорошее решение, правда. Но, пожалуйста, не забывайте финал после второго URL. ;) - person Marcel Korpel; 03.02.2010
comment
@Marcel Я добавил недостающее - person Mic; 03.02.2010

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

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

function myFunc() {
    location.href = "mailto:[email protected]&body=Hello!";
    setTimeout(function() {
        location.href = "newPage.html";
    }, 500);
}
person T.J. Crowder    schedule 03.02.2010

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

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

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

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

location.href="mailto:[email protected]&body=Hello!";
setTimeout(function(){ location.href = 'newPage.html' },  500);
person Pekka    schedule 03.02.2010
comment
лол, ты избил меня, пока я проверял свой ответ. Я обнаружил, что интервал тайм-аута 0 отлично работает, по крайней мере, в Chrome. У меня тоже нет голосов, иначе я бы +1 :-) - person Andy E; 03.02.2010
comment
РЖУ НЕ МОГУ! Теперь нас трое, мой друг. :-) Но мне все еще нравится ответ Мика. - person T.J. Crowder; 03.02.2010