3

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

5 回答 5

7

尝试使用类似的东西:

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

而不是在加载时。

于 2010-02-03T15:14:34.390 回答
6

更改href属性将启动位置加载,之后再次更改将取消先前的导航。

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

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

function myFunc(){ 
  location.href="mailto:test@test.com&body=Hello!"; 
  window.setTimeout(function () { location.href="newPage.html" }, 0); 
} 
于 2010-02-03T15:15:37.193 回答
4

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

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

function myFunc() {
    location.href = "mailto:test@test.com&body=Hello!";
    setTimeout(function() {
        location.href = "newPage.html";
    }, 500);
}
于 2010-02-03T15:15:04.917 回答
1

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

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

我不会依赖它来工作,只是作为一个不错的可选便利功能。

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

location.href="mailto:test@test.com&body=Hello!";
setTimeout(function(){ location.href = 'newPage.html' },  500);
于 2010-02-03T15:11:07.107 回答
0
function redirect() {
    setTimeout(function() {
        location.href = "index.html";
    }, 1000);
}
于 2021-10-03T23:13:10.777 回答