Search code examples
domhtawindows-scripting

How to get the size of a HTA window?


You can SET the size of a HTA window but I can't find a way to GET its size.

All I can think of is reading document.body.offsetWidth and .offsetHeight, but those give you the viewport size not the actual window size.

Is it possible to know that?


Solution

  • It seems there are no properties or methods to get that information. The now beta-released IE9 has the new properties outterWidth and outterHeight, but that is not an option for now.

    So I devised a workaround for this:

    function addWinSizeGetterFuncs(){
       var currViewportWidth = document.body.offsetWidth ;
       var currViewportHeight = document.body.offsetHeight ;
       resizeTo(currViewportWidth,currViewportHeight) ;
       var chromeWidth = currViewportWidth-document.body.offsetWidth ;
       var chromeHeight = currViewportHeight-document.body.offsetHeight ;
       resizeTo(currViewportWidth+chromeWidth,currViewportHeight+chromeHeight) ;
       window.getWidth = new Function('return document.body.offsetWidth+'+chromeWidth) ;
       window.getHeight = new Function('return document.body.offsetHeight+'+chromeHeight) ;
    }
    

    What that function does is to create two new methods for the window object: window.getWidth() and window.getHeight(). They will get the actual size of the window.
    The function requires the existence of the body object so it has to be executed after the BODY tag.


    And now that we are at it, the same problem applies for the window position. You can't get the actual window position. What you can get is the viewport position relative to the screen. So the same workaroud serves for this as well:

    function addWinPosGetterFuncs(){
       var currViewportLeft = screenLeft ;
       var currViewportTop = screenTop ;
       moveTo(currViewportLeft,currViewportTop) ;
       var viewportOffsetX = screenLeft-currViewportLeft ;
       var viewportOffsetY = screenTop-currViewportTop ;
       moveTo(currViewportLeft-viewportOffsetX,currViewportTop-viewportOffsetY) ;
       window.getScreenX = new Function('return screenLeft-'+viewportOffsetX) ;
       window.getScreenY = new Function('return screenTop-'+viewportOffsetY) ;
    }
    

    Likewise, the function creates two new methods that will retrieve the actual window position: window.getScreenX() and window.getScreenY()

    Problem solved. I'll let you guys figure out how the function works ;)