最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

How can I launch the eMail client, and then do a page redirect with Javascript? - Stack Overflow

programmeradmin5浏览0评论

I'm required to make a website function exactly the same on other browsers as it does in IE6. Part of the current code looks similar to this:

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

in IE, this causes the mail client to open with the specified message prepared, and then redirects the browser to newPage.html. Other browsers, however, only redirect to newPage.html. How can I achieve this effect (opening the mail client and then doing a page redirect) consistently across browsers?
As a note, I've also tried to accomplish this using meta refresh, but was unsuccessful.

I'm required to make a website function exactly the same on other browsers as it does in IE6. Part of the current code looks similar to this:

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

in IE, this causes the mail client to open with the specified message prepared, and then redirects the browser to newPage.html. Other browsers, however, only redirect to newPage.html. How can I achieve this effect (opening the mail client and then doing a page redirect) consistently across browsers?
As a note, I've also tried to accomplish this using meta refresh, but was unsuccessful.

Share Improve this question asked Feb 3, 2010 at 15:02 T.R.T.R. 7,5926 gold badges31 silver badges34 bronze badges 5
  • Have you tried changing the <script> tag to <script type="text/javascript"> to see if there is a difference? – Anthony Forloney Commented Feb 3, 2010 at 15:05
  • What other browsers? it works in my FF 3.5.7. – rodrigoap Commented Feb 3, 2010 at 15:07
  • yeah, no luck. Thanks for trying, though. – T.R. Commented Feb 3, 2010 at 15:09
  • I've been testing in Chrome. It doesn't seem to be working in Firefox 3.5.1 for me on this machine, though, either. – T.R. Commented Feb 3, 2010 at 15:11
  • I edited my answer for a possible workaround, check it out. – Pekka Commented Feb 3, 2010 at 15:14
Add a comment  | 

5 Answers 5

Reset to default 7

Try using something like:

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

Instead of at the onload.

Changing the href property will start a location load, changing it again afterwards will cancel the previous navigation.

It appears that IE6 will start the e-mail client immediately upon setting the property, then continue the javascript execution. Other browsers appear to do things differently, and the second location load will cancel the first.

I managed to work around this in Chrome with a timer, it might work for other browsers too:

function myFunc(){ 
  location.href="mailto:[email protected]&body=Hello!"; 
  window.setTimeout(function () { location.href="newPage.html" }, 0); 
} 

On the whole, I tend to think security settings will get in your way and would recommend just giving the user a boring old-fashioned mailto link to click. (Edit: Perhaps one set up like Mic suggests.)

That said, I wonder if things become any more reliable if you introduce a delay:

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

This will work only if the client's browser knows which E-Mail client to open for mailto: links in the first place. If the user uses a web-based client that is not registered with the browser, nothing will happen.

Also, it could be that security settings prevent mailto: links from opening programmatically, or will prevent it in the future.

I wouldn't rely on this to work either way, only as a nice optional convenience function.

Anyway, to answer your question, can you try setting a timeout between the two calls? Maybe the location refresh is just too quick for the browser to catch up.

location.href="mailto:[email protected]&body=Hello!";
setTimeout(function(){ location.href = 'newPage.html' },  500);
function redirect() {
    setTimeout(function() {
        location.href = "index.html";
    }, 1000);
}
发布评论

评论列表(0)

  1. 暂无评论