1

jQuery 2.0 이상을 사용하는 웹 사이트가 있고 jQuery가로드되지 않은 경우 작업을 수행하려고합니다. 본질적으로, 나는 jquery.check.js이 같은 일을 해요 등 IE8, 7, 6과 같은 jQuery를 2 지원하지 않는 브라우저ASP.NET 번들을 사용하여 jQuery를 확인하는 것은 IE8에서 실패합니다

를 확인하고 있습니다

if (typeof window.jQuery == 'undefined') { 
    //show not supported page 
} 

BundleConfig이 같은 번들을하고있다 :

var b1 = new ScriptBundle("~/bundle/js").Include(
      "~/Scripts/jquery-{version}.js", 
      "~/Scripts/jquery.check.js" 
      ); 
     b1.Orderer = new InputBundleOrderer(); 
     b1.Transforms.Clear(); //this removes the mimification for debugging purposes 

     bundles.Add(b1); 

debug="true"에 코드가 잘 작동합니다. false으로 설정하면 작동하지 않습니다. IE8로 디버깅하는 동안 if 문에 절대로 도달하지 않고 많은 오류가 있습니다.

오류가 발생하여 IE8에서 JavaScript 파일 실행이 중지되어 코드 블록에 도달하지 못하는 것 같습니다. 그것이 내가 왜 debug="true" (파일이 별도로로드 될 때) 작동하고 그들이 번들로 제공 될 때 (하나의 단일 파일) 작동하지 않는지에 관해서 생각해 볼 수있는 유일한 이유입니다.

제 생각은 정확합니까?

+0

번들에서 jquery.check.js를 제외하고 별도의 참조로 추가하여 문제를 해결했습니다. 이것은 기본적으로 내 생각이 옳았다는 것을 증명했습니다. –

답변

2

내가 아는 한 당신이 옳다. 오류가 발생하면 해당 파일에 대한 스크립트 실행이 중지됩니다. 동일한 파일에 실제로 넣으려면 jQuery 선언을 try/catch/finaly 블록으로 둘러 쌀 수 있습니다 (좋은 아이디어가 아닌지 확인하십시오 : |)

또한 .min 제작 용 .js 파일 번들에 포함시키지 말아야한다고 생각합니다.

1

이러한 테스트를 수행하기 위해 modernizr과 같은 것을 사용하지 않는 이유는 무엇입니까? 그것이 바로 의도 된 것입니다. 브라우저의 경우 load the correct version of jQuery으로 설정할 수도 있습니다. 더 간단한 선택은 조건부 주석 만 사용하는 것입니다.

<!--[if lt IE 9]> 
    <script src="jquery-1.9.0.js"></script> 
<![endif]--> 
<!--[if (gte IE 9) | (!IE)]><!--> 
    <script src="jquery-2.0.0.js"></script> 
<!--<![endif]--> 

난 당신이 딱 맞는 브라우저에 맞는 하나를로드 할 수 있고,의 jQuery 1.9+이 기능 호환 jQuery를 2.x를하기 때문에 당신은 오래된 브라우저를 "지원하지"이유를 모르겠어요.

왜 변형하고 있습니까? 삭제()? 디버그 모드는 자동으로 축소를 제거합니다 ..

+0

이 시점에서 결정은 다음 두 가지 이유로 IE8을 지원하지 않았습니다. 1. IE8 사용자는 우리 방문자 중 적은 수이며 빠르게 빠져 나가고 있습니다. 2. 사이트는 jQuery 2.0 이상에서만 테스트되었습니다. 우리는 아직 IE8과 1.9로 재시험 할 시간이 없다. 또한 브라우저의 특정 조건에 의존하지 않고 함수의 존재 여부를 확인하기 위해 속성을 사용하는 것이 더 좋습니다. 게시 된 코드에 대한 의견을 읽으면 의도적으로 디버깅 목적으로 축소를 제거하고 있습니다. 내가 무슨 일이 일어 났는지 알았을 때 그 줄은 삭제되었다. –

+0

@ JonasStawski - 나는 당신을 위해 효과가 있기를 바랍니다. 내 경험에 따르면 IE8을 사용하고있는 고 가치 고객이 갑자기 정상적으로 작동하게됩니다. 어떤 경우에도 jQuery 버전 테스트를 계속 사용할 수 있습니다. 다시 한번 jQuery 1.9+와 2.0+는 기능적으로 동일하며 jQuery에 의해 이미 테스트되었습니다. –

+0

입력 해 주셔서 감사합니다. 게임의이 시점에서 우리는 빠른 속도로 움직여야합니다. IE8을 뒤에 남겨 두는 것을 의미합니다. 나는 우리가 중요한 IE8 사용자를 잃어 버릴지도 모른다고 동의하고, 만약에 그것이 발생하면 우리는 신속하게 알아 내고 당신의 방법 중 하나를 통해 그것을지지 할 필요가있을 것이다. –