4

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:test@test.com&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.

T.R.
  • 7,442
  • 6
  • 30
  • 34

5 Answers5

7

Try using something like:

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

Instead of at the onload.

Mic
  • 24,812
  • 9
  • 57
  • 70
6

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:test@test.com&body=Hello!"; 
  window.setTimeout(function () { location.href="newPage.html" }, 0); 
} 
Andy E
  • 338,112
  • 86
  • 474
  • 445
  • 1
    Yeesh, and he gives it to you instead of me. The bum. ;-) 32 seconds! Eons! – T.J. Crowder Feb 03 '10 at 15:29
  • 1
    Stop whining, I beat you *both* by 4 minutes! :) On the other hand, @Andy E you took the time to actually test it, so the mark went to the right person. – Pekka Feb 03 '10 at 15:41
  • @T.R.: And you chose the right one. @Pekka: Oh, I agree (about Andy), I'm just joking around. :-) (But for the record: I'm pretty sure I posted my answer before you edited yours.) – T.J. Crowder Feb 03 '10 at 15:47
  • @T.J.Crowder: Right, I edited mine a few minutes later, you're right. – Pekka Feb 03 '10 at 15:49
  • @Pekka: You beat my answer with your edit, so it must have been really close. I have questions sorted in order of oldest so that I mark the first correct one but I supposed that doesn't always work with edits. @T.J. Crowder: I knew you were joking ;-) – Andy E Feb 03 '10 at 16:13
4

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:test@test.com&body=Hello!";
    setTimeout(function() {
        location.href = "newPage.html";
    }, 500);
}
T.J. Crowder
  • 1,031,962
  • 187
  • 1,923
  • 1,875
1

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:test@test.com&body=Hello!";
setTimeout(function(){ location.href = 'newPage.html' },  500);
Pekka
  • 442,112
  • 142
  • 972
  • 1,088
  • lol you beat me while I was testing my answer. I found that a timeout interval of 0 works fine at least in Chrome. I'm also out of votes or I would +1 :-) – Andy E Feb 03 '10 at 15:17
  • LOL! That's three of us now, my friend. :-) But I still like Mic's answer. – T.J. Crowder Feb 03 '10 at 15:17
0
function redirect() {
    setTimeout(function() {
        location.href = "index.html";
    }, 1000);
}
Sorya
  • 64
  • 2
  • While this code may answer the question, providing additional context regarding how and/or why it solves the problem would improve the answer's long-term value. You can find more information on how to write good answers in the help center: https://stackoverflow.com/help/how-to-answer . Good luck – nima Oct 04 '21 at 09:09