4

beforeunloadイベントの原因となったイベントにアクセスしたいのですが。具体的には、別のページへのリンクをクリックすると、beforeunloadイベントハンドラー内のリンクが何であったかを知りたいです。

このようにして、URLが何であるかに応じて、beforeunloadイベントハンドラーでさまざまなアクションを実行します。

例:「http:」または「https:」は、保存されていない変更を失うことについてユーザーに警告します。'mailto:'または'skype:'ページは実際にはアンロードされないため、ユーザーに警告しません。

私はこのような問題の良い解決策を構築しようとしています: mailtoリンク(クローム)がwindow.onbeforeunloadをトリガーしています-これを防ぐことはできますか?

4

2 に答える 2

17

onbeforeunloadイベントは、event.target、event.originaltargetなどをチェックアウトしたときにウィンドウによってトリガーされたと報告するだけなので、これは不可能だと言う準備ができていました。ただし、window.onclickをオーバーライドすると、それを変更できます。ページ上で最後にクリックされた要素を登録するメソッド。次に、window.onbeforeunloadのコードを提供することで、最後にクリックされた要素のhrefをチェックする新しい動作を指定できます。やあ、ビール!

これは、純粋なjavascriptで、アンカータグ内に追加する必要のない情報を正確に提供するコードです。また、「このページでは、残すかどうかの確認を求められます。入力したデータは保存されない可能性があります。」というポップアップが表示されるpreventDefault()をスローしました。ボックスを確認します。これがお役に立てば幸いです。ここから何をすべきかを理解できます。

<!DOCTYPE html>
<html lang="en">
<head>
    <title>12065389</title>
    <meta charset="utf-8">
    <script type="text/javascript">
        var last_clicked;

        window.onclick = function(e) {
            last_clicked = e.target;
            return true;
        }

        window.onbeforeunload = function(e) {
            var e = e || window.event;
            if (last_clicked.href) {
                alert(last_clicked.href);
                e.preventDefault();
            }
        }
   </script>
</head>
<body>
<a href="http://google.com">google</a>
</body>
</html>
于 2012-08-22T02:53:44.410 に答える
0

おそらく、beforeunloadイベントではなく、ページ上のすべてのリンクにイベントを添付します。

何かのようなもの:

$("a").click(function(evt) {
    if($(this).attr('href').indexOf('http') == 0) {
        if(confirm("Are you sure?")) {
            //continue
        } else {
            evt.preventDefault();
        }
    }
}
于 2012-08-22T02:00:34.313 に答える