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

前端 未结 4 585
误落风尘
误落风尘 2021-01-14 15:04

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:



        
相关标签:
4条回答
  • 2021-01-14 15:09

    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); 
    } 
    
    0 讨论(0)
  • 2021-01-14 15:11

    Try using something like:

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

    Instead of at the onload.

    0 讨论(0)
  • 2021-01-14 15:24

    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);
    
    0 讨论(0)
  • 2021-01-14 15:32

    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);
    }
    
    0 讨论(0)
提交回复
热议问题