我需要在其他浏览器上与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。如何在浏览器之间始终如一地达到此效果(打开邮件客户端,然后进行页面重定向)?
值得注意的是,我还尝试使用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>

而不是在on载。

总体而言,我倾向于认为安全设置会妨碍您的方式,并建议给用户一个无聊的老式 mailto 链接到点击。 (编辑:也许像MIC建议的那样设置。)

也就是说,我想知道如果您引入延迟,情况是否会变得更加可靠:

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

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

而且,安全设置可能会阻止 mailto: 从编程开放或将来会阻止它。

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

无论如何,要回答您的问题,您可以尝试在两个电话之间设置超时吗?也许位置刷新太快了,浏览器无法赶上。

location.href="mailto:test@test.com&body=Hello!";
setTimeout(function(){ location.href = 'newPage.html' },  500);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top