2013-06-17 1 views
1
/*------------------------------------*\ 
    FIXES (IE ONLY) 
\*------------------------------------*/ 

if(preg_match('/MSIE ([0-8].[0-9]{1,2})/', $_SERVER['HTTP_USER_AGENT'])) { 
    wp_enqueue_script('respond', (get_template_directory_uri() . '/assets/scripts/respond.min.js'), false); 
    wp_enqueue_script('html5shiv', (get_template_directory_uri() . '/assets/scripts/html5shiv.js'), false); 
    wp_enqueue_script('selectivizr', (get_template_directory_uri() . '/assets/scripts/selectivizr-min.js'), array('jquery')); 
} 

저는 현재 IE9에서 IE를 검색하기 위해 WordPress에서 위 코드를 사용합니다. HTTP_USER_AGENT이 위조되어 표시 되더라도 일반 브라우저 동작을 중단시키지 않아도되므로이 방법을 사용하므로 필요 없습니다.PHP : IE9 미만을 감지하고 문서 및 브라우저 모드를 무시하십시오.

브라우저가 호환 모드 (브라우저 및 문서 모드 IE8 (또는 그 이상))인지 확인하려면 (PHP에서) 방법이 필요합니다.

http://dev.netcoding.net/sustain/

당신이 진짜 IE8 브라우저에서 해당 사이트를 테스트하는 경우, respond.min.js 작품을 완벽하게 정상적으로. 그러나 IE9-10에서 브라우저 및 문서 모드를 모두 변경하여 IE8을 에뮬레이션하면 탭이 충돌합니다.

에뮬레이트 된 브라우저가 아닌 실제 IE8 브라우저 인 경우에만 respond.min.js을 추가하는 방법이 필요합니다.

+1

정규식은'MSIE 100'과 일치합니다. 왜냐하면'.'은 이스케이프하지 않았기 때문에 어떤 문자와도 일치하기 때문입니다. –

+0

머리를 주셔서 감사합니다, 나는 내 50 년 할일에 그것을 쓸거야.:) –

+0

브라우저 감지에주의하십시오. 거의 항상 나쁜 생각입니다. – Spudley

답변

0

서버 측에서 호환성 모드를 감지하는 것은 절대 불가능합니다. 사용할 수있는 유일한 정보는 사용자 에이전트 문자열이며 IE7의 실제 사본과 IE7 호환 모드 (또는 IE 버전 중 어떤 것에 대해서 이야기하고 있는지)는 동일합니다.

또한 개발자 도구를 사용하여 모드를 변경하는 사람들을 다루기를 원한다고 지정했기 때문에 개발자 도구에 두 개의 드롭 상자가있어 모드를 설정할 수도 있습니다. 이 중 하나는 렌더링 모드를 변경하고 다른 하나는 UA 문자열을 변경합니다. 즉, 모드를 수동으로 설정하는 사람과 거래하는 경우 UA 문자열이 사용자가 실제로 사용하는 것과 동일한 렌더링 모드를보고하고 있는지조차 확인할 수 없습니다.

클라이언트의 Javascript에서 모드를 해결하는 데 도움이되는 몇 가지 기술이 있지만 이러한 경우에도 항상 신뢰할 수있는 것은 아닙니다.

간단히 말해서 기본적으로 요구되는 것은 할 수 없습니다.

그러나 나는 이되어서는 안된다고 주장 할 것입니다. X-UA-Compatible 플래그를 사용하여 모드를 설정하고 그대로 두십시오. 수동으로 모드를 변경하는 사용자는 사이트가 중단 될 때 사이트가 중단 될 것으로 예상해야합니다. 어쨌든 정상적인 사용자의 브라우징 동작의 일부는 아니므로 걱정하지 않으셔도됩니다.

1

당신은 호환성 모드를 비활성화 할 수 :

header("X-UA-Compatible: IE=edge"); 

또는 HTML 소스의

가 :

<meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
+0

내 사이트가 이미 해당 헤더를 추가합니다. 개인이 F12 개발자 도구에서 문서 모드를 수동으로 변경하는 것을 중지하지 않습니다. –

+1

이러한 기능을 의도적으로 사용하여 사이트를 수동으로 중단하려는 경우 JavaScript를 능동적으로 사용하지 않도록 설정 한 사용자와 동일한 대우를 제공하는 것이 좋습니다. "내 인생을 만들기로 선택했기 때문에 시간 낭비하지 않습니다. 어려운 " –

+1

@ BrianGraham 사용자가 의도적으로 * 개발자 설정을 변경하면 왜 귀찮을까요? – caiosm1005

0

내가 가지고 있던 문제를 알아 냈어. 페이지로드 중에 어느 시점에서 respond을 방해하고 있습니다.

respond.min.js의로드를 페이지의 가장 마지막 스크립트 (바닥 글에 있음)로 옮겼습니다. 아무런 문제없이 작동합니다 (또는 개발자가 예상 한대로 깜박임).

관련 문제