On Thu, 20 Jan 2011 03:22:29 +0100, Alex Komoroske <komoro...@chromium.org> wrote:

Hi all,

There is currently no good way for a web page to detect that it is
completely invisible to the user...

We have implemented something like this for our extensions framework, where it is common to have messaging between a tb and the background tab where the main extension logic runs. It would also make sense for applications that might want to communicate with each other client-side, rather than having to pass everything through a server (not so relevant to the common Google models, but very relevant to applications that explicitly don't want to share with a cloud provider).

Use cases

* An app can provide notifications (using the Web Notification stuff that is under developemnt) when it is not visible/focused, but skip them when it is to minimise distractions and reduce cognitive load * An application can (try to) communicate with the currently focused application. This is essentially what a whole class of extensions does in practice. Enabling it for general HTML would be a step towards making it possible to share different functionality extensions. Right now, it would rely on out-of-band agreement about how to communicate, but that is perfectly feasible in practice. It also introduces a clear requirement for a security discussion (see the paper that Art posted recently...).

With these use-cases in mind, there are a number of requirements.

Requirements

* Easy for developers to write scripts that fall back on old behaviors for browsers that do not implement this API
* Ability to query the document’s current visibility state
* Events fired when the document transitions between visibility states
* Ability for browser vendors to add new visibility states in the future


Proposed API

document.visible

Returns true if document.visibilityState’s current value is in the set of
visibility states considered to be visible (see the next section for
information on document.visibilityState). In practice document.visible is merely a convenience property that is well-suited to simple uses.
In most implementations, only the “visible” state is considered visible--
although some implementations may consider other values to be visible as
well (for example, an implementation that makes use of nearly-full-size
thumbnail previews may consider “preview” to be a visible state).

The idea that a thumbnail, or popup, can mean that more than one document is visible is interesting.

In our API we have getFocused() (which mostly does what it says on the box, although certain special tabs don't respond to it)

document.visibilityState

A read-only property that returns a string

It would make sense to have this relate to the ViewModes stuff that was originally developed for widgets, no?

visibilitychange

A simple event, fired at the document object immediately after
document.visibilityState transitions between visibility states. The event has a property, fromState, that is set to the value of
document.visibilityState just before it was changed to the current value.
Note that visibility has nothing to do with whether the document’s contents have fully loaded or not, which implies that for any given
visibility transition event, onload may or may not have already fired.

We have tabs.onblur and tabs.onfocus - which is not the same as visibility state since it is about more than just rendering, like where input will actually go.

Note that our API is currently implemented from a global perspective - you can find out what the current tab is, but a tab would have to do that then compare to itself, rather than being able to directly query its state. I am finding that there are disadvantages to not ahving that information readily available.

cheers

Chaals

--
Charles McCathieNevile  Opera Software, Standards Group
    je parle français -- hablo español -- jeg lærer norsk
http://my.opera.com/chaals       Try Opera: http://www.opera.com

Reply via email to