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?
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 ;)
minified version:
window.pos=new function(w,h,x,y){with(document.body)return(
resizeTo(w=offsetWidth,h=offsetHeight),resizeTo(w+(w=w-offsetWidth),h+(h=h-offsetHeight)),
moveTo (x=screenLeft ,y=screenTop ),moveTo (x-(x=screenLeft-x ),y-(y=screenTop-y )),{
w:function(){return offsetWidth +w},
h:function(){return offsetHeight+h},
x:function(){return screenLeft -x},
y:function(){return screenTop -y}
})};
精彩评论