Webkit浏览器(Chrome和Safari)不支持mailto链接?

4
以下是我的代码:
    function email(from, to, subject, body){

    if(subject == "Website Feedback"){
        to = to + "; augustoandrew@gmail.com";
    }

    if(from == "Outlook" || from == "LiveDesk"){
        window.location="mailto:"+to+"?subject="+subject+"&body="+body;
    }else if(from == "Gmail"){
        window.location="https://mail.google.com/mail?view=cm&tf=0"+to+"&su"+subject+"&body"+body;
    }
}

以下HTML的Javascript代码:

    <div id="hiddenForm">
    <form>
        What do you use for your email? <select id="from">
                                            <option value="Outlook">Outlook (Desktop Mail)</option>
                                            <option value="Gmail">Gmail (Web Mail)</option>
                                            <option value="Yahoo">Yahoo (Web Mail)</option>
                                            <option value="Live">Windows Live (Web Mail)</option>
                                            <option value="LiveDesk">Windows Live (Desktop Mail)</option>
                                            <option value="AOL">AOL (Web Mail)</option>
                                        </select><br />
        <hr />
        <br />
        Subject:    <select id="subj">
                        <option value="General">General</option>
                        <option value="Appointment">Appointment</option>
                        <option value="Website Feedback">Website Feedback</option>
                    </select><br />
        <br />
        Body: <br /><textarea id="message"></textarea><br />

        <input type="submit" value="Send" onclick="email(this.form.from.value, 'bibbidy@judys.com', this.form.subj.value, this.form.message.value)" /> 
    </form>
</div>

我的问题是,在Internet Explorer和Firefox中,这段代码完美运行。但在Safari和Chrome中,它无法工作。基本上只是重新加载页面,但没有任何反应。如您所见,它只能与Outlook和Live(桌面版)一起使用mailto。我不确定Gmail是否可用。如果有人能帮助我知道为什么Webkit浏览器不能识别此代码,请务必提供帮助。


我不确定浏览器,但我知道我不喜欢mailto链接!SCNR - Tim Büthe
请注意:使用 mailto 需要用户使用的计算机配置了邮件客户端。今天许多用户使用 Web 客户端,因此它将无法工作。更好的解决方案是将表单发送回您的服务器(在表单标记中使用 method='post')并在那里处理数据。这也更快,因为您不必等待邮件通过所有邮件服务器再返回给您。 - some
是的,我明白。现在只是为了测试目的,我想确保我可以从中构建电子邮件。将来当这成为一个服务器应用程序时,我会考虑到这一点并相应地重构我的代码。但就目前而言,我只是在我的电脑上进行测试,我有一个桌面客户端设置。 - banjokaboom
这是你的决定,但我的意见是,你正在浪费时间使用15年前就已经过时的方法。你可以下载一个完整的具有脚本和数据库功能的Web服务器单一软件包。通过这个,你可以编写代码并在完成后将其移动到真实服务器上,只需编辑配置文件即可让应用程序在真实服务器上使用正确的资源。 - some
2个回答

4

尝试使用window.location.href='mailto:marco@h4kr.com'; ;)方式发送邮件,适用于Chrome 12 :),但尚未在Safari上进行测试 :)


刚在Safari 5.0.5/OS X 10.6.7上测试过,也能正常工作。 - Scott
嗯...这很奇怪。它对我不起作用。我将我的window.location更改为window.location.href,但那也没有起作用。所以我尝试将字符串更改为一个实心电子邮件而不是由字符串构建的,但那也没起作用。然后我尝试将按钮制作成mailto链接,但那也没起作用。所以我改变了显示隐藏表单的链接。它以前是href="#",但现在我给它一个mailto链接。那个方法起作用了。我可能需要调整href并将发送按钮改为<a>标签。 - banjokaboom
只需要在你的表单中添加 onsubmit="return false",就可以解决问题了。这可能是因为你的代码已经在起作用,但每次点击按钮时,表单都会被提交;所以加上这个属性后,就不会再出现这个问题了。所以,新的表单应该是:<form onsubmit="return false"> - Walialu

1

感谢以上代码的帮助,我终于完成了。

function mailURL(url)
{
  var mailto_link = 'mailto:'+'?subject='+document.title+'&body='+escape(url);

        if(getBrowser()=='mozilla'){
            // Mozilla FireFox Mail To Friend
            // Opens a new tab but also opens up Microsoft Office window with URL
            window.open(mailto_link,'emailWindow'); 
        }
        else if(getBrowser()=='ie'){
            // IE Favourite
            window.open(mailto_link,'emailWindow');
        }
        else if(getBrowser()=='opera'){
            // Opera
            return true;
        }           
        else if (getBrowser()=='safari'){ // safari
            window.location.href=mailto_link;
            //alert('mail to safari');
        }
        else if(getBrowser()=='chrome'){
            window.location.href=mailto_link; 
            //alert('mail to chrome'); 
        }                       
  }

function getBrowser(){
        var userAgent = navigator.userAgent.toLowerCase();
        $.browser.chrome = /chrome/.test(userAgent);
        $.browser.safari= /webkit/.test(userAgent);
        $.browser.opera=/opera/.test(userAgent);
        $.browser.msie=/msie/.test( userAgent ) && !/opera/.test( userAgent );
        $.browser.mozilla= /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent ) || /firefox/.test(userAgent);

        if($.browser.chrome) return "chrome";
        if($.browser.mozilla) return "mozilla";
        if($.browser.opera) return "opera";
        if($.browser.safari) return "safari";
        if($.browser.msie) return "ie";

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接