DZone
Web Dev Zone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
  • Refcardz
  • Trend Reports
  • Webinars
  • Zones
  • |
    • Agile
    • AI
    • Big Data
    • Cloud
    • Database
    • DevOps
    • Integration
    • IoT
    • Java
    • Microservices
    • Open Source
    • Performance
    • Security
    • Web Dev
DZone > Web Dev Zone > Using HTML5's PageVisibility API

Using HTML5's PageVisibility API

Sagar Ganatra user avatar by
Sagar Ganatra
·
Dec. 08, 11 · Web Dev Zone · Interview
Like (0)
Save
Tweet
4.79K Views

Join the DZone community and get the full member experience.

Join For Free

Recently I stumbled upon the PageVisibility API introduced in HTML5, which gives developers an opportunity to improve the performance of a web page and to better the user experience. Whenever a user opens a new tab or navigates to another tab, the behavior of the current page from which user navigated can be controlled using this API. Consider a webmail client that is trying to look for new mails every two seconds, if a user opens a new tab or minimizes the browser window then retrieving mails every two seconds would expend resources, whilst the user is not actively viewing the page. Here the PageVisibilty API would come handy and would allow developers to alter the behavior of the web page.

The specification introduces the interface - DocumentVisibility. It includes the attributes 'hidden' and 'visibilityState'. The hidden attribute of the document object (document.hidden) returns true if the user selects another tab or when the browser window is minimized. It returns false when the same document is selected by the user. The visibilityState attribute is used to indicate the state of the page - hidden, visible and preview (marked as optional in the spec).

To be notified when the document becomes hidden or when it becomes visible again one can listen to the 'visibilitychange' event. The example below calculates the number of seconds the user was not active on the page:

 <!DOCTYPE HTML>  
 <html>  
 <head>  
      <script type="text/javascript">  
           timer = 0;  
           function onLoad(){  
                document.addEventListener("visibilitychange",stateChanged);  
                document.addEventListener("webkitvisibilitychange", stateChanged);  
                document.addEventListener("msvisibilitychange", stateChanged);  
           }  
           function stateChanged(){  
                console.log(document.webkitVisibilityState);  
                if(document.hidden || document.webkitHidden || document.msHidden){  
                     //new tab or window minimized
                     timer = new Date().getTime();  
                }  
                else {  
                     alert('You were away for ' + (new Date().getTime()-timer)/1000+ ' seconds.')  
                }  
           }  
      </script>  
 </head>  
 <body onLoad="onLoad()">  
 </body>  
 </html>

Browser support:

Chrome and IE-10 (surprisingly) have implemented this specification. However, as observed in the above code, they have provided their own prefixes to the attributes and the event listener. On Chrome, the attributes are named webkitHidden and webkitVisibilityState. On IE, it is msHidden and msVisibilityState. Similarly the event is named webkitvisibilitychange and msvisibilitychange.

Uses:

The PageVisiblity API can be used to notify the page when the user is not interacting with it. On receiving this notification, the client can stop polling for new data. Also, when the user selects the page, a notification can be sent to indicate that the user is active and new data can be fetched from the server. This API would also come handy where the web page is rendering some animation effects. It would make sense to stop the animation when the user is not viewing the page. When the user selects the page, a welcome back message can be displayed and the animation effect can be started.

 

Source: http://www.sagarganatra.com/2011/11/using-html5s-pagevisibility-api.html

API

Opinions expressed by DZone contributors are their own.

Popular on DZone

  • Automation Testing vs. Manual Testing: What's the Difference?
  • 8 Must-Have Project Reports You Can Use Today
  • 12 Modern CSS Techniques For Older CSS Problems
  • DZone's Article Submission Guidelines

Comments

Web Dev Partner Resources

X

ABOUT US

  • About DZone
  • Send feedback
  • Careers
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • MVB Program
  • Become a Contributor
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 600 Park Offices Drive
  • Suite 300
  • Durham, NC 27709
  • support@dzone.com
  • +1 (919) 678-0300

Let's be friends:

DZone.com is powered by 

AnswerHub logo