mailto在IE中失败,其中有一个长正文。有什么方法可以解决这个问题吗?

时间:2010-02-11 00:00:24

标签: internet-explorer email

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

用户点击链接后,IE会更改为about:空白页面,并且永远不会完成对Outlook的调用以创建电子邮件

以下是一个例子:

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

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

这是一个已知的IE问题吗?有什么限制?

5 个答案:

答案 0 :(得分:32)

我永远无法让location.href = mailtoHref黑客工作。但是,我发现以下工作。

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

修改

这是一种没有jQuery的方法:

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"的Knockout自定义绑定:

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();
            }
        });
    }
};

答案 1 :(得分:12)

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

无论如何,我做了一些测试并想出了一个使用Javascript的解决方法:

<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(),以便切换到相应的链接。

难看吗?你打赌。但它适用于紧要关头。

答案 2 :(得分:2)

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

答案 3 :(得分:2)

我也尝试过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>

正如CBono所提到的,如果你想要它是动态的,你只需要将mailto字符串作为参数传递给函数并将其分配给sMailto变量。

希望这有帮助。

答案 4 :(得分:1)

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

我希望在某处记录下来;我只是猜测试验这个。

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

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