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

Med*_*Man 14 email internet-explorer

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

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

这是一个例子:

<a href="mailto:name@name.com?subject=123456789&amp;body=111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111">mailto fails in IE8</a>
Run Code Online (Sandbox Code Playgroud)

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

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

小智 32

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

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

编辑

这是一种没有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);
    }
}
Run Code Online (Sandbox Code Playgroud)

并且,为了更好的衡量,这里是一个Knockout自定义绑定可用作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();
            }
        });
    }
};
Run Code Online (Sandbox Code Playgroud)

  • 天才.我正在开发一个企业内部网,它对IE 7进行了各种各样的改进.这个黑客击败了他们的mod并使我的客户满意!谢谢! (5认同)
  • 你的jQuery的第一行缺少`)` (2认同)

CBo*_*ono 12

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

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

<a href="javascript:doMailto()">Send Email</a>
Run Code Online (Sandbox Code Playgroud)

然后定义这个脚本:

<script type="text/javascript">
   var sMailto = "mailto:name@name.com?subject=123456789&amp;body=111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111234567890";

   function doMailto() {
      document.location.href = sMailto;
   }

</script>
Run Code Online (Sandbox Code Playgroud)

无论出于何种原因,IE都没有问题"转发"到长URL(我的测试场景使用800多个字符).在具有多个mailto链接的情况下,您可以定义多个URL变量并将参数发送到doMailto()该变量,以便切换到适当的链接变量.

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

  • 在IE11上,当URL超过507个字符时,这不起作用. (4认同)
  • FWIW,我一直遇到长度大于~505个字符的URL问题.因此,即使512也不是一个严格的规则.谢谢,IE8! (3认同)