Is it possible to get the current viewport Range (the visible part of the page inside the browser) using XUL functions from Javascript or plain Javascript?
Thank you!
Is it possible to get the current viewport Range (the visible part of the page inside the browser) using XUL functions from Javascript or plain Javascript?
Thank you!
width :document.body.offsetWidth; height :document.body.offsetHeight;
HERE are better examples for various browsers
For the viewport you need to use
document.documentElement.scrollTop
/scrollLeft
/scrollHeight
/scrollWidth
. There is a slight complication: I think that in quirks mode (document.compatMode
is"BackCompat"
) you need to check these properties ondocument.body
instead ofdocument.documentElement
.See https://developer.mozilla.org/en/DOM/element.scrollTop for documentation.
Edit: It seems that you aren't really interested in the viewport but rather its contents. AFAIK there is no generic way to get the contents of a particular area of the web page. It definitely cannot be described by a single
Range
object, rather a set of ranges. And even then: if the element has lots of text and all of it is a singleTextNode
, you won't know which parts of the text are visible and which are not.However, in some special cases (particularly when the page structure is simple) you might be able to learn what text is being displayed by using range.getBoundingClientRect(). You start by selecting everything in your range and reducing that selection until the range size is within viewport boundaries.
Here is an example that does it for a vertically scrollable
<div>
containing lots of text: http://jsfiddle.net/5vEdP/ (tested in Firefox 6, Chrome 14 and IE 9). It first needs to make sure that each text character is placed into its ownTextNode
, otherwise you won't be able to select it separately in aRange
object. It then selects the container of the text and moves the start of the range until the top boundary of the range is below the top boundary of the container. And then it does the same thing for the bottom boundary by moving the end of the range. In the end you get a range that selected only the text nodes that are fully visible.