如何启动eMail客户端,然后使用Javascript进行页面重定向?

时间:2010-02-03 15:02:25

标签: javascript redirect mailto

我需要在其他浏览器上使网站功能与在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 个答案:

答案 0 :(得分:7)

尝试使用以下内容:

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

而不是onload。

答案 1 :(得分:5)

更改href属性会启动位置加载,然后再次更改它会取消上一个导航。

IE6会在设置属性后立即启动电子邮件客户端,然后继续执行javascript。其他浏览器似乎以不同的方式执行操作,第二个位置加载将取消第一个。

我设法在Chrome中使用计时器解决此问题,它也适用于其他浏览器:

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

答案 2 :(得分:4)

总的来说,我倾向于认为安全设置会妨碍你,并建议只给用户一个无聊的老式mailto链接点击。 (编辑:也许就像Mic建议的那样。)

那就是说,如果你引入延迟,我想知道事情是否会变得更可靠:

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

答案 3 :(得分:1)

仅当客户端的浏览器知道首先为mailto:链接打开哪个电子邮件客户端时,这才有效。如果用户使用未在浏览器中注册的基于Web的客户端,则不会发生任何事情。

此外,可能是安全设置阻止mailto:链接以编程方式打开,或将来阻止它。

我不会依赖于这两种方式,只是作为一个不错的可选便利功能。

无论如何,要回答你的问题,你能尝试在两次通话之间设置超时吗?也许位置刷新太快,浏览器无法赶上。

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