2009-11-17 4 views
3

Есть ли все равно, чтобы предотвратить onbeforeunload от вызова при нажатии на ссылку mailto в chrome. В FF, Safari, IE работает нормально.Предотвращение onbeforeunload от вызова при нажатии на mailto link

<html> 
<head> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"> 
     google.load("jquery", "1.3.2"); 
    </script> 

    <script type="text/javascript"> 
     $(document).ready(function(){ 
      window.onbeforeunload = confirmExit; 
     }); 

     function confirmExit() { 
      return "Are you sure?"; 
     } 
    </script> 
</head> 
<body> 
    <a href="mailto:[email protected]?subject=test mail&body=Hello%20World">Mail Link</a> 
</body> 
</html> 

ответ

5

А как насчет обходного пути?

$(document).ready(function(){ 
    mailtoClicked = false; 
    window.onbeforeunload = confirmExit; 
    //Test if browser is Chrome 
    if (/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())) { 
     $('a[href^=mailto]').click(function() {mailtoClicked = true;}); 
    } 
}); 

function confirmExit() { 
    if (!mailtoClicked) { 
     return "Are you sure?"; 
    } else { 
     mailtoClicked = false; 
    } 
} 

Demo.

+0

Что относительно Firefox? – Qwertiy

+0

@Qwertiy Что относительно Firefox? ОП сказал, что там работает нормально. – robertc

+0

Нажмите кнопку mailto-link в FF, флаг установлен в значение true, событие 'onbeforeunload' не запущено. Теперь закройте страницу: 'onbeforeunload' запускается, но игнорируется. – Qwertiy

1

Вот такие предлагаемые решения, который выглядит разумным

http://www.ilovebonnie.net/2009/09/23/how-to-use-onbeforeunload-with-form-submit-buttons/


UPDATE (ссылка мертва) - было скопировано содержимое из Google Cache

Как использовать onbeforeunload с подчиненной формой Кнопки

23 сентября 2009 г. - Geekery

При выполнении некоторых программ я столкнулся с интересным затруднительным положением. Хотя я понимаю, что зло для пользователя трудно оставить на странице, я здесь не для того, чтобы рассуждать о достоинствах (или их отсутствии) onbeforeunload.

В определенной форме мы вынуждаем браузер не кэшировать информацию, чтобы избежать потенциальных проблем AJAX/JavaScript, если они должны оставить форму и вернуться, поскольку браузеры не все действуют одинаково (например, IE оставляет флажки отмеченными но не помнит изменений, которые произошли на странице из-за JavaScript). Поэтому мы предупреждаем наших пользователей, когда они собираются оставить форму заказа, чтобы сообщить им, что им нужно будет заполнить ее снова.

Функции был достаточно прост:

window.onbeforeunload = function() { 
    return "You are about to leave this order form. You will lose any information..."; 
} 

К сожалению, это также будет срабатывать, если пользователь представил форму, которая, очевидно, не то, что мы хотим. После поиска вокруг в Интернете я наткнулся на простое решение, что я думал, что я хотел бы поделиться:

// Create a variable that can be set upon form submission 
var submitFormOkay = false; 
window.onbeforeunload = function() { 
    if (!submitFormOkay) { 
     return "You are about to leave this order form. You will lose any information..."; 
    } 
} 

С OnClick появляется зарегистрироваться перед onsubmit при нажатии на кнопку отправки, мы можем добавить немного объявление переменной для нашей кнопки отправки так что submitFormOkay будет установлено значение true до того, как произойдет отправка формы:

<input type="submit" id="submit_button" onclick="submitFormOkay = true;"> 
+0

Неработающая ссылка ... Не полезно в 2017 году! – ForguesR

+1

@ForguesR Я скопировал содержимое из кеша Google, так что теперь это полезно снова! – Coops

 Смежные вопросы

  • Нет связанных вопросов^_^