代码之家  ›  专栏  ›  技术社区  ›  MedicineMan

mailto在有长正文的IE中失败。有什么办法解决这个问题吗?

  •  14
  • MedicineMan  · 技术社区  · 16 年前

    我在使用Internet Explorer 8(IE8)打开带有长消息的mailto链接时遇到问题。

    用户单击链接后,IE将更改为“关于:”空白页,并且从不完成对outlook的创建电子邮件的调用

    <a href="mailto:name@name.com?subject=123456789&amp;body=111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111">mailto fails in IE8</a>
    

    如果我缩短了1的列表,电子邮件就会生成并可以发送。

    5 回复  |  直到 16 年前
        1
  •  32
  •   Tomalak    12 年前

    location.href = mailtoHref 开始工作。不过,我发现下面的作品。

    $('body').append($('<iframe id="mailtoHack" src="' + mailtoHref + '"/>');
    $('#mailtoHack').remove();
    

    编辑

    function mailtoHack(href) {
        var iframeHack;
        if (href.indexOf("mailto:") === 0) {
            iframeHack = document.createElement("IFRAME");
            iframeHack.src = href;
            document.body.appendChild(iframeHack);
            document.body.removeChild(iframeHack);
        }
    }
    

    而且,为了更好地衡量,这里有一个可以作为 data-bind="mailto: foo"

    ko.bindingHandlers.mailto = {
        init: function (element, valueAccessor) {
            ko.utils.registerEventHandler(element, "click", function (e) {
                var href = ko.unwrap(valueAccessor()), iframeHack;
                if (href.indexOf("mailto:") === 0) {
                    iframeHack = document.createElement("IFRAME");
                    document.body.appendChild(iframeHack);
                    document.body.removeChild(iframeHack);
                } else {
                    e.preventDefault();
                }
            });
        }
    };
    
        2
  •  12
  •   CBono Giulio Vian    15 年前

    我也遇到了IE8的问题。令人惊讶的是,这正在发生;这似乎是一个问题,我们会遇到大约1998年!

    <a href="javascript:doMailto()">Send Email</a>
    

    然后定义此脚本:

    <script type="text/javascript">
       var sMailto = "mailto:name@name.com?subject=123456789&amp;body=111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111234567890";
    
       function doMailto() {
          document.location.href = sMailto;
       }
    
    </script>
    

    不管出于什么原因,IE都可以“转发”到长url(我的测试场景使用800多个字符)。如果有多个 mailto doMailto() 这样就可以切换到合适的。

    它难看吗?当然。但它在紧要关头起作用。

        3
  •  2
  •   micmcg    16 年前

    我的建议是停止滥用可怜的mailto链接。如果您想预填充那么多信息,请为用户构建一个联系人表单。

        4
  •  2
  •   Brenda    12 年前

    我也尝试了CBono发布的解决方案,但我也不能让它工作。我发现在浏览器中直接粘贴mailto URL时,不管字符串有多长都没有问题。所以,我实现了这样的东西:

    <a href ="#" onclick="javascript:doMailto(); return false;">Send Email</a>
    
    <script type="text/javascript">
       var sMailto = "mailto:mail@something.com;mail@something.com;mail@something.com?subject=A really long subject can go here if you want and it will work Im telling you&body=Click for detailed profileClick for detailed profileClick for detailed profileClick for detailed profileClick for detailed profileClick for detailed profileClick for detailed profileClick for detailed profileClick for detailed profileClick for detailed profileClick for detailed profileClick for detailed profileClick for detailed profileClick for detailed profileClick for detailed profileClick for detailed profileClick for detailed profileClick for detailed profileClick for detailed profileClick for detailed profileClick for detailed profileClick for detailed profileClick for detailed profileClick for detailed profileClick for detailed profileClick for detailed profileClick for detailed profileClick for detailed profile&cc= &bcc= mail@something.com";
    
       function doMailto() {
          window.open(sMailto);
       }
    
    </script>
    

    希望这有帮助。

        5
  •  1
  •   MedicineMan    16 年前

    下面的超链接似乎起作用了。它有512个字符长,似乎每次都有效。你可以增加To的长度,但必须从主语或正文中减去。与主题相同。

    我希望这是有据可查的地方;我只是从实验中猜出来的。

    <a href="mailto:name@name.com?subject=123456789&amp;body=111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111234">
    

    我将很乐意接受任何人的回答,可以跟踪文件,表明这是一个已知的问题。