views:

990

answers:

2

I want to show an alert if I have something in my Facebook inbox. I think it can be easily accomplished using userscripts... this is what I have so far (thanks to the guys at the userscripts forums):

document.addEventListener("DOMNodeInserted", function() {
  var count;
  if ((count=parseInt(document.getElementById("fb_menu_inbox_unread_count").textContent)) > 0)
  alert("You have "+count+" new message"+(count==1 ? "" : "s")+".");
}, true);

This works great, except the message gets stuck in a loop after clicking "OK", and keeps popping up. Is there a way to stop the message after I click dismiss the alert?

+2  A: 

Add a variable which keeps track of how many messages there were last alert, and do not show if that variable hasn't changed.

Something like:

document.addEventListener(
  "DOMNodeInserted", 
  function() { 
    var count = parseInt(document.getElementById("fb_menu_inbox_unread_count").textContent);
    if (count > 0 && count != lastCount) {
      alert("You have "+count+" new message"+(count==1 ? "" : "s")+"."); }, true);
    }
    lastCount = count;  // Remember count to avoid continuous alerts.

Also, I would avoid writing code all in one like, as you did in your original post. It makes it more difficult to read and change if need be.

Ben S
Shouldn't lastCount = count; be outside the if statement? after 1 message, the alert wouldn't happen until 2nd message if he read the message.
oneporter
I edited my post with the bugfix.
Ben S
A: 

Set a custom cookie using document.cookie to save the count, then do your regular checks

Jim