2012-04-02 48 views
0

爲什麼不在IE6或IE7中使用此代碼?在IE6和IE7中使用Javascript「確認」

$('a').click(
    function() 
    { 
     var urlIsExternal = true; 

     var urlMedicareDir = '/medicare/'; 
     var urlMedicareHost = 'health.healthcare.com'; 
     var urlMedicare = 'https://' + urlMedicareHost + urlMedicareDir; 

     var urlAppsHost = 'apps.healthcare.com'; 

     var urlCurrent = String(window.location); 
     var urlCurrentPrefix = urlCurrent.substring(0, urlMedicare.length); 
     var urlCurrentURL = $.url(urlCurrent); 

     var urlClicked = $(this).attr('href'); 
     var urlClickedURL = $.url($(this).attr('href')); 

     var urlHost = urlClickedURL.attr('host'); 

     if(!urlHost.length) 
     { 
      urlHost = urlCurrentURL.attr('host'); 
     } 

     var urlConfirmMessage = 'You are now leaving the Medicare website.'; 

     if(urlCurrentPrefix == urlMedicare) 
     { 
      if(urlClicked.substring(0, 1) == '/') // starts with slash 
      { 
       if(urlClicked.substring(0, urlMedicareDir.length) == urlMedicareDir) 
       { 
        urlIsExternal = false; 
       } 
      } 

      if(urlClicked.substring(0, urlMedicare.length) == urlMedicare) 
      { 
       urlIsExternal = false; 
      } 

      if (
       urlClicked.substring(0, 1) != '/' && 
       urlClicked.substring(0, 4) != 'http' && 
       urlClicked.substring(0, 4) != 'file' 
      ) 
      { 
       urlIsExternal = false; 
      } 

      if(urlAppsHost == urlHost) 
      { 
       urlIsExternal = false; 
      } 

      if(urlClicked.substring(urlClicked.length-4) == '.pdf') 
      { 
       urlIsExternal = false; 
      } 
     } 
     else 
     { 
      urlIsExternal = false; 
     } 

     if(urlIsExternal) 
     { 
      if(confirm(urlConfirmMessage)) 
      { 
       window.open(urlClicked); 
       return false; 
      } 
      else 
      { 
       return false; 
      } 
     } 
     else 
     { 
      return true; 
     } 
    } 
); 

出於某種原因,當鏈接被點擊了IE6還是IE7,他們不會將用戶引導到的鏈接,並沒有提示確認對話框。它應該提示確認對話框,但由於某種原因,它不是。

+4

你在錯誤控制檯看到任何錯誤? – jfriend00 2012-04-02 22:35:52

+2

代碼提示:不要'String(window.location)'而是'window.location.href'。 – Ryan 2012-04-02 22:37:35

+0

如果您可以將問題縮小到可能的最小範圍,它將幫助所有人(包括您!)。嘗試在代碼中的關鍵點插入一些有意義的'alert()'調用,以確保它們得到執行。 – aaaidan 2012-04-02 22:46:44

回答

1

我不認爲你正在阻止錨點(「a」)的默認動作。

,這樣,當你來到這裏你應該開始$('a').click(function(event) {

if(urlIsExternal) { 

    // This tells jQuery to NOT follow the hyperlink 
    event.preventDefault(); 

    if(confirm(urlConfirmMessage)) { 
     window.open(urlClicked); 
    } 

}

然而,什麼是真正缺少的是這個代碼需要後文件已加載運行。所以,你只需要與

$(document).ready(function(){ 
    $('a').click(function(event) { 
     /* your code */ 
    } 
});

來包裝你的功能,而不調用$(document).ready(),JavaScript的運行文件的正文之前被渲染,所以它沒有找到任何<a>標籤,它可以附加點擊事件。

1

看來,如果用戶點擊一個鏈接,該鏈接的href以當前主機以外的某個值開始,則需要提供確認對話框。這是一個令人討厭的策略,爲什麼用戶不知道之前點擊鏈接,它會在別處?

無論如何,你正在嘗試做一個簡單的版本是:

function showPrompt() { 
    return confirm('Do you really want to leaving ' + window.location.host + 
       '?\nPress OK to continue or Cancel to stay on this page.'); 
} 

window.onload = function() { 

    // The links collection is live and available as a property of window 
    var link, links = document.links; 

    // Include criteria for host, hostName, protocol, whatever as required 
    var re = new RegExp(window.location.host || 'no host'); 

    for (var i=0, iLen=links.length; i<iLen; i++) { 
    link = links[i]; 

    // Only add the listener to links that need it 
    if (!re.test(link.href)) { 

     // Add the listener however you want, this way is simple and robust 
     link.onclick = showPrompt; 
    } 
    } 
}