Mailto не работает в IE, где есть длинный текстовый текст. Есть ли способ разрешить это?
У меня возникла проблема с использованием Internet Explorer 8 (IE8) для открытия ссылок mailto с длинными сообщениями.
После того, как пользователь нажмет на ссылку, IE изменит на: пустую страницу и никогда не завершает вызов Outlook для создания электронной почты
Вот пример:
<a href="mailto:[email protected]?subject=123456789&body=111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111">mailto fails in IE8</a>
Если я сокращу список из 1, письмо будет сгенерировано и отправлено.
Является ли это известной проблемой IE? Каковы ограничения?
Ответы
Ответ 1
Я тоже столкнулся с этой проблемой с IE8. Удивительно, что это происходит; это похоже на проблему, с которой мы столкнулись бы в 1998 году!
В любом случае, я провел некоторое тестирование и придумал обходной путь, который использует Javascript:
<a href="javascript:doMailto()">Send Email</a>
Затем определите этот script:
<script type="text/javascript">
var sMailto = "mailto:[email protected]?subject=123456789&body=111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111234567890";
function doMailto() {
document.location.href = sMailto;
}
</script>
По какой-то причине IE не имеет проблем с переадресацией длинных URL-адресов (мой сценарий тестирования использует более 800 символов). В случаях с несколькими ссылками mailto
вы можете определить несколько переменных URL и отправить параметр в doMailto()
, который позволяет ему перейти на соответствующий.
Это уродливо? Вы делаете ставку. Но он работает в крайнем случае.
Ответ 2
Я никогда не мог заставить трюк 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);
}
}
И для хорошей меры здесь используется пользовательская привязка 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();
}
});
}
};
Ответ 3
Моим советом было бы прекратить злоупотреблять бедной почтовой связью. Если вы хотите заранее заполнить эту информацию, создайте контактную форму для пользователя.
Ответ 4
Я также попытался с выпуском CBono, но я тоже не смог его сработать. Я обнаружил, что, когда вы напрямую вставляете URL-адрес mailto в браузер, у него нет проблем независимо от того, сколько времени занимает строка. Итак, я реализовал что-то вроде этого:
<a href ="#" onclick="javascript:doMailto(); return false;">Send Email</a>
<script type="text/javascript">
var sMailto = "mailto:[email protected];[email protected];[email protected]?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= [email protected]";
function doMailto() {
window.open(sMailto);
}
</script>
Как упоминалось CBono, если вы хотите, чтобы это было динамическим, вам просто нужно передать строку mailto в качестве параметра функции и передать ее в переменную sMailto.
Надеюсь, что это поможет.
Ответ 5
похоже, что работает следующая гиперссылка. Он имеет длину 512 символов и, кажется, работает каждый раз. Вы можете увеличить длину To, но вы должны вычесть либо из объекта, либо из тела. То же самое с субъектом.
Я хотел бы, чтобы это было где-то зарегистрировано; Я просто угадываю, экспериментируя с этим.
<a href="mailto:[email protected]?subject=123456789&body=111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111234">
Я с радостью принимаю любой ответ от человека, который может отслеживать документацию, которая указывает, что это известная проблема.