2014-10-22 3 views
3

간단한 질문이어야합니다. jsDom 객체의 너비는 어떻게 설정합니까?jsDom의 창 너비를 설정 하시겠습니까?

jsdom.env({ 
     url:'http://testdatalocation', 
     scripts: ['http://code.jquery.com/jquery.js'], 
     done: function(errors, tstWindow) { 
      console.log(tstWindow.innerWidth); 
}; 
} 
}); 

나는 "innerWidth는"1024

+0

귀하의 마지막 문장은 당신이 그것을 할 시도했지만 작동하지 않았다 의미한다. 너 무슨 짓을 한거야? – Louis

+0

여러 가지. tstWindow.resizeTo (#) tstWindow.resizeBy (#) "width"속성을 설정하고 innerWidth 특성을 설정하고 다른 것들을 기억하지 못했습니다. –

+0

나는 API 변경 때문에 부분적으로 어려움을 겪고 있다고 생각하지만 jsDom을 완벽하게 파악하지 못하는 것 같습니다. (내 다른 질문에 대한 귀하의 도움을 주셔서 감사합니다, 루이, 이것은 동일한 일을 계속) –

답변

1

현재 공식 옵션이나 API가 없습니다. 테스트 케이스와 설명서, outerWidth isn't referenced elsewhere else in jsdom 넘어

DOMWindow.prototype = createFrom(dom || null, { 
    // ... 
    name: 'nodejs', 
    innerWidth: 1024, 
    innerHeight: 768, 
    outerWidth: 1024, 
    outerHeight: 768, 
    // ... 
}); 

, 그래서 당신은 아마뿐만 아니라 outerWidth를 업데이트합니다 created event 내에서 새 값을 할당 할 수 있습니다 : innerWidth와 유사한 특성의

값은 단순히 set to literal values 있습니다. created에 대한

주요 사용 사례는 스크립트를 실행하기 전에 (예를 들어, 내장 프로토 타입에 새로운 기능을 추가) 창 개체를 수정하는 것입니다.

created: function (errors, tstWindow) { 
    tstWindow.outerWidth = tstWindow.innerWidth = 1440; 
}, 
done: function(errors, tstWindow) { 
    console.log(tstWindow.innerWidth); 
} 
+0

이 페이지의 모든 자바 스크립트에 전달됩니까? –

+1

@SkipHuffman 만약'created' 이벤트로 이동했다면'done'을 사용했을 때와 마찬가지입니다. 이 이벤트의 목적은 스크립트가 실행되기 전에'window'를 수정할 수 있도록하는 것입니다. –

3

resizeToresizeBy 방법이 구현되지 않고 아무것도 할 얻을 방법을 알아낼 수 없습니다. 당신은 jsdom의 코드베이스를 검색하여 해당을 볼 수

$ grep -P 'resize(To|By)' `find . -type f` 
./lib/jsdom/browser/index.js: resizeBy: NOT_IMPLEMENTED(null, 'window.resizeBy'), 
./lib/jsdom/browser/index.js: resizeTo: NOT_IMPLEMENTED(null, 'window.resizeTo'), 

한 번만 초기화시 모든 창 크기를 설정하려는 경우, 당신은 당신이 원하는대로 할 수있는 innerWidth 값을 설정할 수 있습니다. 실제 브라우저에서는 이것이 올바른 방법은 아니지만 실제로 작동합니다.

var jsdom = require("jsdom"); 

var document = jsdom.env({ 
    html: "<html></html>", 
    done: function (error, w) { 
     console.log(w.innerWidth, w.innerHeight); 
     w.constructor.prototype.resizeTo = function (width, height) { 
      this.innerWidth = this.outerWidth = width; 
      this.innerHeight = this.outerHeight = height; 
     }; 
     w.resizeTo(100, 200); 
     console.log(w.innerWidth, w.innerHeight); 
    } 
}); 

이 표시됩니다 : 위의

1024 768 
100 200 

코드는 resizeTo이 존재에 따라 코드가있는 경우

그러나, 당신은 창문을 구축 생성자에 자신의 polyfill을 추가 할 수 있습니다 설명을위한 것입니다. resizeTo에 대한 polyfill 작성의 모든 내용에 대해 생각하지 않았습니다. resizeBy도 비슷하게 처리되지만 델타를 창 크기에 추가합니다.

+0

고마워, 내가 좀 분석해야 할 것입니다. –

관련 문제