2013-11-20 2 views
-1

사용중인 브라우저에 따라 특정 페이지로 사용자를 리디렉션하려고합니다. 특히 IE 인 경우이 페이지로 이동하고 다른 페이지에서는이 페이지로 이동하십시오. 잘 작동했지만 IE10/IE11이 나왔을 때 더 이상 작동하지 않습니다. 다른 코드를 조합하여 사용하면 다음과 같이 나타납니다.IE10/IE11을 통한 브라우저 감지

function get_browser() 
{ 
    var N=navigator.appName, ua=navigator.userAgent, tem; 
    var M=ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i); 

    if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1]; 
    M=M? [M[1], M[2]]: [N, navigator.appVersion, '-?']; 

    return M[0]; 
} 

function get_browser_version() 
{ 
    var N=navigator.appName, ua=navigator.userAgent, tem; 
    var M=ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i); 

    if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1]; 
    M=M? [M[1], M[2]]: [N, navigator.appVersion, '-?']; 

    return M[1]; 
} 

var browser=get_browser(); 
var browser_version=get_browser_version(); 

if ((browser=="msie") 
&& (version>=4)) 
{ 
    if(browser=="opera"||"chrome"||"safari"||"firefox") { 
     location.replace("mobile_demo.php"); } 
    else { location.replace("full_demo.php"); } 
} 

그러나 작동하지 않습니다. 어떤 도움을 주셔서 감사합니다. 감사! 뾰족한의 도움에

올바른 코드 감사 : 여기

function get_browser() 
{ 
    var N=navigator.appName, ua=navigator.userAgent, tem; 
    var M=ua.match(/(opera|chrome|safari|firefox|msie|trident)\/?\s*(\.?\d+(\.\d+)*)/i); 

    if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1]; 
    M=M? [M[1], M[2]]: [N, navigator.appVersion, '-?']; 

    return M[0]; 
} 
//Optional to get browser version, not needed in this case 
function get_browser_version() 
{ 
    var N=navigator.appName, ua=navigator.userAgent, tem; 
    var M=ua.match(/(opera|chrome|safari|firefox|msie|trident)\/?\s*(\.?\d+(\.\d+)*)/i); 

    if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1]; 
    M=M? [M[1], M[2]]: [N, navigator.appVersion, '-?']; 

    return M[1]; 
} 

var browser=get_browser(); 
var browser_version=get_browser_version(); 

if (browser=="MSIE"||browser=="Trident"){ 
    location.replace("full_demo.php"); } 
    else { 
    location.replace("mobile_demo.php"); } 
+0

코드를 포맷하십시오. – iConnor

+4

왜 IE10과 IE11의 사용자를 리디렉션 하시겠습니까? 해결하려는 문제는 무엇입니까? – Pointy

+0

모든 IE 브라우저를 사용하는 경우 특정 페이지로 이동하십시오. 다른 브라우저의 다른 페이지 .. 감사합니다! – user2665375

답변

2

귀하의 논리 (서식이 다시) : 브라우저는 "MSIE"과 버전 인 경우

if ((browser=="msie") && (version>=4)) { 
    if (browser=="opera"||"chrome"||"safari"||"firefox") { 
    location.replace("mobile_demo.php"); 
    } 
    else { 
    location.replace("full_demo.php"); 
    } 
} 

을 의미한다 4 이상이면 브라우저가 "오페라", "크롬", "사파리"또는 "파이어 폭스"인 경우 모바일 데모로 이동하지만, 그렇지 않은 경우 4 가지 데모 전체로 이동하십시오.

그래서 브라우저가 "msie"인지 확인한 다음 다른 네 가지 브라우저 중 하나인지 확인합니다. 언제있을거야? 브라우저가 이미 "msie"인 것으로 알려진 경우에만 테스트를 수행하기 때문에 절대로 사용하지 마십시오. "msie"일 수도 있고 다른 시간대 중 하나 일 수도 있습니다. 브라우저 "msie"가 아닌 한 코드가 항상 전체 데모를로드합니다.이 경우 아무 것도 수행하지 않거나 당신이 게시하지 않은 것.

편집 — 당신이해야 할 모든 브라우저가 IE인지 아닌지를 결정하는 경우 : IE11에 대한

if (browser == "msie") 
    location.replace("full_demo.php"); 
else 
    location.replace("mobile_demo.php"); 

, 그러나, 당신은 마이크로 소프트가 를 의도적으로이 문제로 실행하는거야은 사용자 에이전트 문자열에서 "MSIE"를 가져 왔습니다. 이 문제를 해결하기 위해 정규 표현식을 "Trident"문자열과 일치하도록 변경할 수 있습니다. See this MSDN resource for more details.

+0

알았습니다. 저는 다른 사람들의 코드를 사용했습니다. 나는 당신의 말을 지금 본다. 나는 아무 것도 의미하지 않는 중첩 된 if 문을 가지고있다. 그래서 나는 그것을 바로 잡을 수있다. 다른 코드가 올바른 것 같습니다. 당신의 도움을 주셔서 감사합니다! – user2665375

+0

@ user2665375는 환영합니다! 신중한 코드 들여 쓰기가 도움이된다는 점에 유의하십시오. 이렇게하면 상황을 쉽게 파악할 수 있습니다. – Pointy

+1

변경 대상 : if (브라우저 == "msie") { \t location.replace ("mobile_demo.php"); } else { \t location.replace ("full_demo.php"); } 그리고 지금까지 IE11 ..와 함께 일하고있는 것 같습니다. :) – user2665375

1

필자는 기능 감지를 사용하여 IE11인지 IE10인지 확인했습니다. 포인터 이벤트를 처리하는 방법에는 차이가 있으며이를 활용합니다.

if (window.navigator.msPointerEnabled && !window.PointerEvent){ 

    // Using feature detection we can diff between IE 11 and IE 10. 
    // Pointer events were added in IE10 (window.PointerEvent). 
    // The syntax changed in IE 11 (vendor prefix was removed). 
    // If pointer events are supported - and - the new syntax is supported, we know it is IE 11. 
    // If pointer events supported and the new syntax is not supported -- then we know it is IE 10. 

    // do something for IE10 here 

} else { 

    // do something for IE11 here 

} 
+0

특정 기능을 사용하는 경우 기능 감지가 작동하지만 브라우저가 기능 구현을 변경하면 더 이상 일반적으로 브라우저를 감지 할 수 없습니다. – theUtherSide