これは、私に提示されたとき、ほとんど不可能なことのように聞こえました。Web ページを離れるときに確認ダイアログ ボックスを表示できることは知っています。しかし、サイトを離れるときにダイアログ ボックスを表示することは可能ですか?
アドレスバーを読み取り、サイトを離れようとしていることを知ることができるものを見つけたり作成したりできませんでした.
これは、私に提示されたとき、ほとんど不可能なことのように聞こえました。Web ページを離れるときに確認ダイアログ ボックスを表示できることは知っています。しかし、サイトを離れるときにダイアログ ボックスを表示することは可能ですか?
アドレスバーを読み取り、サイトを離れようとしていることを知ることができるものを見つけたり作成したりできませんでした.
まず、どのイベントが実際にユーザーをサイトから遠ざけることができるかを定義しますか?
そう。これらすべてについて何ができますか?
onclick
イベントにいくつかの機能を追加しますonsubmit
1 と同様。フォームがサイト外にポスト バックするイベント用の機能を追加します。onbeforeunload
ますが、何が起こっているのかを知ることにはあまり成功しません。また、関連する特定の制限もあるonbeforeunload
ため、ほとんどの場合、手が縛られます。ユーザーがあなたを離れないようにすることを除いて、とにかくこのイベントを制御したいのはなぜですか。とにかく、物乞いはウェブの世界ではあまり正当化されません。そして、あるサイトがメッセージで私を悩ませたり、さらに悪いことに私が離れることを妨げたりすると、私はもう戻りたくありません. 悪臭悪臭悪臭とアドウェア サイトのヒントを与えます。
むしろ、価値のあるコンテンツを提供することで、ユーザーの関心を維持するようにしてください。
あなたの最善の策は、非標準のbeforeunload
イベントを聞くことです。これは、W3C 標準に非常に厳密に準拠することが知られている Opera を除いて、ほぼすべてのブラウザでサポートされています。
キックオフの例:
window.onbeforeunload = function() {
return "You're leaving the site.";
};
このメッセージは、一種の確認ダイアログとして表示されます。
null
特定のケースでは、ナビゲーション リンクがクリックされるか、内部フォームが送信されるたびに、オフにする必要があります (単に に設定するだけです)。click
目的のリンクのsubmit
イベントと目的のフォームのイベントをリッスンすることで、これを行うことができます。ここでjQueryが大いに役立つかもしれません:
window.onbeforeunload = function() {
return "You're leaving the site.";
};
$(document).ready(function() {
$('a[rel!=ext]').click(function() { window.onbeforeunload = null; });
$('form').submit(function() { window.onbeforeunload = null; });
});
外部リンクであることを示すために、すべての外部リンクに事実上の標準属性を与えるだけで済みrel="ext"
ます。
<a href="http://google.com" rel="ext">Google</a>
これは役立つかもしれません
onclick
attach の前にイベントを確認する必要がありinitLocalLinkException()
ます。HTML :
<a href="test.html">internal link</a>
<a href="#test">html anchor</a>
<a href="http://www.google.com">external link</a>
<a href="http://www.google.com" target="_blank">blank external link</a>
<form action="test.html" method="post" >
<button type="submit">Post Button</button>
</form>
JavaScript :
$(document).ready(function () {
initLocalLinkException();
window.onbeforeunload = function () { confirmExit() };
$('form').submit(function () {
window.onbeforeunload = null;
});
});
function initLocalLinkException() {
$('a').click(function () {
if ($(this).attr('target') != '_blank') {
var link = $(this).attr('href');
if (link.substr(0, 4) == 'http') {
var LocalDomains = new Array('http://www.yourdomain.com',
'https://yourdomain.com',
'localhost', '127.0.0.1');
var matchCount = 0;
$.each(LocalDomains, function () {
if (this == link.substr(0, this.length)) {
matchCount++;
}
});
if (matchCount == '0') {
confirmExit();
} else {
window.onbeforeunload = null;
}
} else { window.onbeforeunload = null; }
}
});
}
function confirmExit() {
alert('Are you sure?'); // Do whatever u want.
}
このスレッドを見てください。
これを実現する方法の 1 つは、JavaScript を使用して、ページのa
読み込み時にページ上のすべてのタグを調べ、それらが外部サイトにリンクしているかどうかを確認することです。その場合は、onclick
イベントを追加して、確認/警告ボックスまたはよりエレガントなものを表示できます。もちろん、jQuery を使用すると、上記のスレッドのように、記述しなければならない Javascript が大幅に簡素化されます。
それが可能だ。SO に質問または回答を入力してから、送信する前に移動してみてください。リンクをクリックしても、アドレス バーに入力しても、「よろしいですか?」というメッセージが表示されます。アラート。SO Metaに投稿して、彼らがこれをどのように行っているかを尋ねるかもしれません。
この質問の式を使用すると、次のことができます。
$.expr[':'].external = function(obj){
return !obj.href.match(/^mailto\:/) && (obj.hostname != location.hostname);
};
$.expr[':'].internal = function(obj){
return obj.hostname == location.hostname;
};
$(function() {
var unloadMessage = function() {
return "Don't leave me!";
};
$('a:internal').click(function() {
window.onbeforeunload = null;
});
$('form').submit(function() {
window.onbeforeunload = null;
});
$('a:external').click(function() {
window.onbeforeunload = unloadMessage;
});
window.onbeforeunload = unloadMessage;
});
サイトを 1 ページの Web アプリとして設計する場合は、これを行うことができます。
つまり、1 つのページが読み込まれ、その後 ajax を使用して他のコンテンツが動的に読み込まれます。
その場合onbeforeunload
、ユーザーがページ/サイトを離れたときにトリガーされます。