mailto терпит неудачу в IE, где есть длинный основной текст. Есть ли способ решить эту проблему? - PullRequest
14 голосов
/ 11 февраля 2010

У меня проблема с использованием Internet Explorer 8 (IE8) для открытия почтовых ссылок с длинными сообщениями.

После того, как пользователь нажимает на ссылку, IE превращается в пустую страницу about: и никогда не завершает вызов Outlook, чтобы создать электронное письмо

Вот пример:

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

Если я укорачиваю список 1, электронное письмо генерируется и может быть отправлено.

Это известная проблема IE? Каковы ограничения?

Ответы [ 5 ]

32 голосов
/ 27 января 2012

Я так и не смог заставить взломать location.href = mailtoHref. Однако я обнаружил, что следующие работы.

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

EDIT

Вот способ сделать это без 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);
    }
}

И, для удобства, здесь есть пользовательская привязка 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();
            }
        });
    }
};
12 голосов
/ 19 июля 2010

Я тоже столкнулся с этой проблемой в 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 ссылками вы можете определить несколько URL-переменных и отправить параметр в doMailto(), который позволит ему переключиться на соответствующую.

Это уродливо?Вы ставите.Но это работает в крайнем случае.

2 голосов
/ 01 августа 2013

Я также попробовал с решением, опубликованным CBono, но я также не смог заставить его работать. Я обнаружил, что когда вы напрямую вставляете URL-адрес mailto в браузер, у него не возникает проблем, независимо от длины строки. Итак, я реализовал что-то вроде этого:

<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.

Надеюсь, это поможет.

2 голосов
/ 27 мая 2010

Мой совет - прекратить злоупотреблять плохой ссылкой mailto. Если вы хотите заранее заполнить эту информацию, создайте контактную форму для пользователя.

1 голос
/ 11 февраля 2010

Похоже, что работает следующая гиперссылка. Это 512 символов в длину и, кажется, работает каждый раз. Вы можете увеличить длину Кому, но вы должны вычесть либо предмет, либо тело. То же самое с темой.

Хотелось бы, чтобы это было где-то задокументировано; Я просто догадываюсь, экспериментируя с этим.

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

Я с удовольствием приму любой ответ от человека, который может отследить документацию, указывающую, что это известная проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...