Skip to content

Instantly share code, notes, and snippets.

@robcee
Created November 28, 2012 14:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save robcee/4161551 to your computer and use it in GitHub Desktop.
Save robcee/4161551 to your computer and use it in GitHub Desktop.
/*
* This Scratchpad will poll the Google Play Store every hour and
* look for the words "Sold Out" in their banner div. If they're
* not there, you'll get an alert that it's in!
*
* This Scratchpad needs to run in Browser Context!
* https://developer.mozilla.org/en-US/docs/Tools/Scratchpad#Using_Scratchpad_to_access_Firefox_internals
*/
var duration = 1000 * 60 * 60; // ms * sec * min = 1 hour
var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
.getService(Components.interfaces.nsIPromptService);
var URL = "https://play.google.com/store/devices/details?id=nexus_4_16gb";
// find our tab
var tab = gBrowser.browsers.filter(function (browser) {
return browser.contentDocument.location.href == URL;
})[0];
// open if necessary
if (!tab) {
gBrowser.selectedTab = gBrowser.addTab(URL);
var tab = gBrowser.selectedBrowser; // grab the browser element
}
// create an nsIWebProgressListener to track state change
var listener = {
QueryInterface: function(aIID) {
if (aIID.equals(Components.interfaces.nsIWebProgressListener) ||
aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
aIID.equals(Components.interfaces.nsISupports))
return this;
throw Components.results.NS_NOINTERFACE;
},
runCount: 0,
onStateChange: function _onStateChange(aBrowser, aWebProgress, aRequest, aStateFlags, aStatus) {
// we're stopped, we should have what we need
listener.runCount++;
if (aStateFlags && Ci.nsIWebProgressListener.STATE_STOP) {
tab.removeProgressListener(listener);
let node = tab.contentDocument.querySelector("div.doc-banner-container");
if (node && !/Sold out/.test(node.innerHTML))
promptService.alert(this, "Surprise!", "It's Here!");
else
window.setTimeout(tester, duration);
}
}
};
function tester() {
tab.addProgressListener(listener, Ci.nsIWebProgress.NOTIFY_STATE_WINDOW);
tab.reload();
}
let timeout = window.setTimeout(tester, 0);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment