2011-08-23 7 views
10

私はonbeforeunload別のページに行くのではなく、ユーザーが自分のサイトを離れるときを検出するにはどうすればよいですか?

window.onbeforeunload = unloadMess; 
function unloadMess(){ 
    var conf = confirm("Wait! Before you go, please share your stories or experiences on the message forum."); 
    if(conf){ 
    window.location.href = "http://www.domain.com/message-forum"; 
    } 
} 

のハンドラを持っているが、私は彼らがページ上のクリックしたURLがサイト内であれば知っているかどうかはわかりません。

私は、サイトから離れる場合に警告することができます。

+21

リンク先をクリックしてサイトを離脱していることを知っていてください。この種のことは、javascriptに悪い名前を付けるものです。 –

+1

可能な複製[javascript onbeforeunloadイベントでどのように宛先URLを取得できますか?](http://stackoverflow.com/questions/1686687/how-can-i-get-the-destination-url-in-javascript-onbeforeunload -event) –

+0

2 UP投票? .... – Nivas

答えて

17

これを100%確実に行うことはできませんが、ユーザーがページ上のリンクをクリックしたときに検出した場合は、それをほぼ正しい信号として使用できます。このような何か:

window.localLinkClicked = false; 

$("a").live("click", function() { 
    var url = $(this).attr("href"); 

    // check if the link is relative or to your domain 
    if (! /^https?:\/\/./.test(url) || /https?:\/\/yourdomain\.com/.test(url)) { 
     window.localLinkClicked = true; 
    } 
}); 

window.onbeforeunload = function() { 
    if (window.localLinkClicked) { 
     // do stuff 
    } else { 
     // don't 
    } 
} 
+1

非常に素晴らしく控えめな解決策 –

1

私は1つのアイデアを持っていますが、それが動作しているかどうかはわかりません。私の提案は、関数呼び出しで各リンクにonClickイベントを追加することです。その関数はhref属性を読み込み、グローバルスコープの変数に格納します。

var clickedHrefAttrValue = ""; 
function getClickUrl(currentLink) 
{ 
    clickedHrefAttrValue = $(currentLink).attr("href"); 
    return true; 
} 

タグのHTMLは次のようなルックスでなければなりません:

<a href="<url>" onClick="getClickUrl(this)">Linktext</a> 

し、あなたの特定の機能に:

function getClickUrl() 
{ 
    if (clickedHrefAttrValue.indexOf("<your condition>" > -1) 
    { 
    //what ever you want do to 
    } 
} 

それはちょうどアイデアですが、私はそれだと思いますそれを試してみる価値がある。

0

あなたのウェブサイトは、絶対と相対の両方のローカルリンクを有することができるので、あなたが問題を持っている場合は、私は(jQueryのを使用して)別の解決策を持っている:

あり

Demo

/* EXTERNAL LINK WARNING 
=========================================*/ 
$('a').on('click', function(e){ 
    e.preventDefault(); 
    var url = $(this).attr('href'), 
     host = location.host;  
    if (url.indexOf(host) > -1 || url.indexOf('http','https') == -1){ 
     /* If we find the host name within the URL, 
       OR if we do not find http or https, 
       meaning it is a relative internal link 
      */ 
     window.location.href = url; 
    } else { 
     var warn = confirm('You\'re leaving the domain.\n\nAre you sure?'); 
     if(warn == true) { 
      window.location.href = url,'_blank'; 
     } else { 
      e.preventDefault; 
     } 
    } 
}); 
-1

私は最近私のウェブサイトで実装したこれに対する良い解決策です。これを想像してみてください。あなたのウェブサイト内でユーザーをナビゲートするすべてのものは、リンク(アンカータグ)、ボタン、クリック可能な画像、またはこれらの行の何かになるでしょう。それは確かに身体の要素になることはありません。

ユーザーがウェブサイトから離れると、URLを入力してEnterキーを押すか、ブックマークをクリックするか、戻る/進むボタンを押します。ユーザーはそれを行うない場合

、次の操作を行います。

$(window).on('beforeunload', function(e)){ 
    if(e.target.activeElement.nodeName.toLowerCase() == 'body'){ 
     yourFunction(); 
}); 

を何が起こることは体が(ユーザーがウェブサイトを離れるときに)このような場合には、ターゲットでの能動素子になり、これが当てはまらないということですユーザが内部ウェブサイトのナビゲート可能な要素をクリックしたとき。

これはクリーンで簡単な解決策です。あなたが何か問題に直面したら教えてください。

+1

しかし、このアクションはリフレッシュでも起こります.. – Gags

関連する問題