2014-12-17 4 views
1

CasperJS로 웹 페이지를 긁어 모으려고합니다. 웹 페이지는 브라우저가 IE 6/7인지 확인합니다.CasperJS가 window.navigator 개체를 설정할 수 없습니다.

casperjs를 사용하여 userAgent를 전달하는 것이 해당 조건을 충족하지 않는 것 같습니다. 해당 UserAgent 통과 (호환; MSIE 6.0; 윈도우 NT 5.1) 모질라/4.0 검사가 casperjs에서 디버그 정보입니다 다음 브라우저

agt = navigator.userAgent.toLowerCase(); 
browserType = navigator.appName; 

if(((browserType.indexOf("xplorer") != -1) 
    && (agt.indexOf("msie 6.") != -1)) 
    || ((browserType.indexOf("xplorer") != -1) 
    && (agt.indexOf("msie 7.") != -1))) 
{ 

} 
else 
{ 
    alert("This "+ browserType + " Version is not supported by this application. Please use Internet Explorer 6.x or Internet Explorer 7.x."); 
    window.close(); 
} 

를 결정하기 위해 페이지에 의해 만들어지고있다 다음을.

[정보] [원격] [경고]이 Netscape 버전은이 응용 프로그램에서 을 지원하지 않습니다. Internet Explorer 6.x 또는 Internet Explorer 7.x를 사용하십시오.

[경고]로드 자원 상태에 실패 [팬텀] = 실패 (HTTP 200) : HTTP : //

리디렉션 페이지 전에 window.navigator 객체를 설정하는 방법에 대한 모든 포인터를?

+0

또한 TrifleJS 프로젝트 (http://triflejs.org/)를 주시하십시오. CasperJS와 아직 작동하지 않습니다. (이것이 제가 답변으로 게시하지 않는 이유입니다!)하지만 이것이 목표 중 하나입니다. (IE7을 에뮬레이트 할 수 있으므로 CasperJS에 묶이지 않은 경우 최상의 선택이 될 수 있습니다.) –

답변

3

navigator 속성은 읽기 전용이므로 설정할 수 없으며 PhantomJS에서는 속성을 설정할 수 없습니다.

해결 방법은 navigator 개체의 프록시를 만드는 것입니다. 예전의 navigator은 백그라운드에 머무르지 만, 같은 동작을하는 새로운 것으로 대체되지만, "Internet Explorer"는 appName입니다. 이 전체 부트 스트래핑 프로세스는 page.initialized 콜백에서 트리거 될 수 있습니다.

casper.on('page.initialized', function(){ 
    this.evaluate(function(){ 
     (function(oldNav){ 
      var newNav = {}; 
      [].forEach.call(Object.getOwnPropertyNames(navigator), function(prop){ 
       if (prop === 'appName') { 
        Object.defineProperty(newNav, prop, { 
         enumerable: false, 
         configurable: false, 
         writable: false, 
         value: 'Internet Explorer' 
        }); 
       } else { 
        Object.defineProperty(newNav, prop, { 
         enumerable: false, 
         configurable: false, 
         get: function(){ 
          return oldNav[prop]; 
         } 
        }); 
       } 
      }); 
      window.navigator = newNav; 
     })(window.navigator); 
    }); 
}); 

같은

page.onInitialized 이벤트 핸들러와 바닐라 PhantomJS 간다.

브라우저 검색을 수행한다고해서 PhantomJS에서 페이지가 작동하거나 잘 작동한다는 것을 보장하지는 않습니다. 일부 페이지가 IE에 대해 "최적화 된"이유가 있습니다. 그 이유는 대부분 다른 브라우저에서 사용되지 않은 일부 독점적 기능을 사용하기 때문입니다.

관련 문제