在Ajax回调中打开电子邮件客户端.不能在iPhone上运行

Open email client within Ajax callback. Not working on iPhone

本文关键字:不能 iPhone 运行 客户端 Ajax 回调 电子邮件      更新时间:2023-09-26

我需要通过javascript打开电子邮件客户端。我需要在ajax调用的成功函数内完成此操作。

我的问题是,这不能在iPhone上工作。当它不在Ajax调用内时,它工作得很好。

function open_email_client(){
    var a = document.createElement('a');
    a.setAttribute("href", "mailto:myfriend");
    a.setAttribute("target", "_blank");
    var dispatch = document.createEvent("HTMLEvents");
    dispatch.initEvent("click", true, true);
    a.dispatchEvent(dispatch); 
}
// open_email_client(); Works here for computer (Chrome) and iPhone (Safari)

$.ajax({
    type: "POST",
    url: "myurl/", 
    data: {},
    success: function(data){
       open_email_client(); // Only works on computer, not iPhone. Tested with alert() that it does go here.
    }
    ,error: function(e) {
    } 
});  

我也试过了:

 document.location.href = "mailto:my_friend";

这对于iPhone(也在Ajax中)工作得很好,但在计算机上不行,因为我需要客户端在新窗口或选项卡中打开。

我想要一个解决方案,不需要我测试我在哪种设备上。

我最终以不同的方式解决了这个问题,这是可能的,因为初始操作是手动点击。

注意ajax调用必须有async=false。

<a id = "email_link" target = "blank_"  >
    <div>Email</div>
</a>

$("#email_link").click(function(){ 
    $.ajax({
        type: "POST",
        url: "myurl/", 
        async: false,
        data: {},
        success: function(data){
          $("#email_link").attr("href","mailto:myfriend"); 
        }
        ,error: function(e) {     
        } 
    });  
});