2012-04-02 6 views
0

IE6 또는 IE7에서이 코드가 작동하지 않는 이유는 무엇입니까? 링크가 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; 
     } 
    } 
); 

, 그들은 링크로 사용자를하지 않으며 그것은 확인 대화 상자를 표시하지 않습니다. 그것은 확인 대화 상자를 프롬프트해야하지만, 어떤 이유로, 그렇지 않습니다.

+4

당신은 오류 콘솔에서 오류를보고 있습니까? – jfriend00

+2

코드 팁 :'String (window.location)이 아니라'window.location.href'. – Ryan

+0

가능한 한 가장 작은 경우에 문제를 좁힐 수 있다면 도움이 될 것입니다! 코드의 핵심 부분에 의미있는'alert()'호출을 삽입하여 코드가 실행되고 있는지 확인하십시오. – aaaidan

답변

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()를 호출하지 않고

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

와 기능을 래핑하는 데 필요한 문서의 본문이 렌더링되기 전에 그것이 클릭을 첨부 할 수 있습니다 어떤 <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; 
    } 
    } 
} 
관련 문제