【问题标题】:Webkit Browsers (Chrome and Safari) don't like mailto?Webkit 浏览器(Chrome 和 Safari)不喜欢 mailto?
【发布时间】:2012-10-09 14:52:36
【问题描述】:

下面是我的代码:

    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 中,它不起作用。它基本上只是重新加载页面,但没有任何反应。如您所见,它仅设置为使用 mailto 与 Outlook 和 Live(桌面版)一起使用。我不确定 Gmail 是否有效。如果有人可以帮助我知道为什么 webkit 浏览器无法识别此代码,请这样做。

【问题讨论】:

  • 我不确定浏览器,但我知道我不喜欢 mailto 链接! SCNR
  • 请注意:使用mailto 要求用户正在使用的计算机已配置邮件客户端。如今,许多用户使用 Web 客户端,因此无法正常工作。一个更好的解决方案是将表单发送回您的服务器(在表单标签中使用method='post')并在那里处理数据。它也快得多,因为您不必等待邮件通过所有邮件服务器才能返回给您。
  • 是的,我明白这一点。出于测试目的,现在我想确保我可以从中构建电子邮件。当它成为服务器应用程序时,我会考虑到这一点并相应地重构我的代码。现在虽然我只是在我的电脑上测试它,我已经设置了桌面客户端。
  • 这是您的决定,但我认为您正在浪费时间使用大约 15 年前已经过时的方法。您可以在single package 中下载具有脚本和数据库功能的完整网络服务器。有了它,您可以编写代码,当它完成时您可以移动到真实服务器,您只需编辑配置文件即可让您的应用程序使用真实服务器上的正确资源。

标签: javascript html webkit mailto


【解决方案1】:

试试 window.location.href='mailto:marco@h4kr.com'; ;)

适用于 chrome 12 ;) 尚未在 safari 中对其进行测试 :)

【讨论】:

  • 刚刚在 Safari 5.0.5/OS X 10.6.7 中测试过,效果也很好。
  • 嗯...这很奇怪。它不适合我。我将 window.location 更改为 window.location.href,但没有用。所以我尝试将字符串更改为不是由字符串构建的可靠电子邮件,但这不起作用。所以我尝试将按钮设置为mailto,但没有成功。所以我然后更改了显示隐藏表单的链接。它曾经是 href="#" 但现在我给了它一个 mailto 链接。那行得通。我可能不得不使用 hrefs 并且可能将发送按钮改为 标签。
  • woa.. 只需对您的表单执行以下操作:添加 onsubmit="return false" 然后这应该对您有用.. 这可能是因为您的代码已经在工作了.. 但每次您点击提交表单的按钮;)所以
【解决方案2】:

感谢您的大力帮助,我终于在上述代码的帮助下完成了工作。

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";

}

【讨论】:

    猜你喜欢
    • 2012-09-19
    • 2011-12-14
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    相关资源
    最近更新 更多