我需要在其他浏览器上使网站功能与在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。如何在浏览器中一致地实现此效果(打开邮件客户端然后执行页面重定向)?
作为一个注释,我也尝试使用元刷新来实现这一点,但是没有成功。
答案 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);