问题
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!
回答1:
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 on document.body
instead of document.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 single TextNode
, 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 own TextNode
, otherwise you won't be able to select it separately in a Range
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.
回答2:
width :document.body.offsetWidth; height :document.body.offsetHeight;
HERE are better examples for various browsers
来源:https://stackoverflow.com/questions/7484330/get-the-visible-range-in-firefox