2013-10-03 51 views
1

因此,使工作的門戶網站。老闆要我登錄用戶,如果他們離開頁面。發現這個教程:http://kbeezie.com/cross-browser-exit-pop/導航離開腳本不工作

我使用jQuery的例子並將其插入到一對夫婦的頁面來測試它。我正在使用asp.net/C#進行開發。下面是頁面的基本佈局,包括我的腳本:

<%@ Page ... %> 
<asp:Content .. > </asp:Content> 
<asp:Content .. > 

    //my navigate away function 
    <script type="text/javascript"> 
     function PopIt() { 
     return "Are you sure you want to leave?"; 
     } 

     $(document).ready(function() { 
     window.onbeforeunload = PopIt; 
      $("a").click(function() { window.onbeforeunload = null; }); 
     }); 
    </script> 

    <div> 
     <table></table> 
     //other stuff 
    </div> 
</asp:Content> 

當我點擊我們的門戶網站的鏈接,該導航離開腳本,但它不會彈出,因爲我們點擊一​​個內部鏈接。但是,如果我一直在網站上進行瀏覽,最終點擊2或3次點擊內部鏈接後,它會詢問我是否確定要離開。誰能告訴我爲什麼會發生這種情況?

編輯:我們在每一頁上的jQuery引用的,所以這不是問題。

編輯:這裏有一個JSFiddle的作品。當你點擊鏈接時,什麼也沒有發生,但是當你離開它時會提示。

+1

我不知道爲什麼你得到你所描述的問題,但我看不出這些代碼將如何應對你離開門戶網站。它將使*每個*鏈接刪除'onbeforeunload'處理程序,無論是否本地。 – Archer

+0

我們的頁面沒有鏈接到外部網站的任何鏈接,這就是爲什麼這個解決方案適合我們的原因,因爲它捕捉了一切(去Google,關閉瀏覽器等) – ToastyMallows

+0

觸發卸載的鏈接最終發生在不是假設的情況下,在母版頁內容中呈現的鏈接或不同的頁面呈現? – Casey

回答

0

所以,一個星期後,左右亂投醫我放棄了。幾天後,我的一位同事向我提到,我們的一個基類繼承自一個腳本攔截器函數,它運行的是OnPreInit

我一直懷疑在我們的大型代碼庫中有某個地方重寫了我的OnBeforeUnload功能,但是當我搜索OnBeforeUnload的用途時,我什麼也沒找到。事實證明,我從來沒有找到腳本攔截器,因爲有人認爲將它命名爲不倫不類是一個好主意!

重寫腳本攔截原始代碼工作後。

1

由於生成了一些鏈接,因此當您分配覆蓋onbeforeunload處理程序的事件處理程序時,它們將不在頁面上。試試這個......

<script type="text/javascript"> 
    function PopIt() { 
     return "Are you sure you want to leave?"; 
    } 

    $(document).ready(function() { 
     window.onbeforeunload = PopIt; 
     $("document").on("click", "a", function() { 
      window.onbeforeunload = null; 
     }); 
    }); 
</script> 

它會捕獲所有的鏈接點擊,不管鏈接是否在腳本運行時在頁面上。

+0

這仍然無法正常工作。點擊鏈接時,我仍然會看到一個對話框。有可能我有我的腳本標籤在錯誤的地方或什麼?不知道還有什麼可能是錯的。 – ToastyMallows

+0

這應該處理頁面上的所有'a'標籤。你沒有在頁面上有內聯框架的鏈接,你呢?沒有看到整個頁面,很難猜測問題可能是什麼。 – Archer

+0

是的,我知道這就是我開始發佈這個時候所擔心的。頁面上沒有框架。我大概90%確定ASP.Net搞砸了。 – ToastyMallows