/ Published in: JavaScript
                    
                                        
                            
                                Expand |
                                Embed | Plain Text
                            
                        
                        Copy this code and paste it in your HTML
var myExtension = {
// This allows you to disable the listener
// without having to remove the script file from
// your xul overlay every time
enabled: true,
// Log info on each loaded/unloaded page to the console?
dumpToConsole: false,
// Display an alert box displaying page info as each page loads/unloads?
enableAlerts: true,
onWindowLoad: function(e){
// Should we even bother?
if(!this.enabled) return;
// Get some useful services
this.cs = Components.classes["@mozilla.org/consoleservice;1"]
.getService(Components.interfaces.nsIConsoleService);
this.ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
.getService(Components.interfaces.nsIPromptService);
// What end of line character do we use?
this.eol = this.getEol();
// Note that it is necessary to wrap our onPageLoad function
// and explicitly state "myExtension" here instead of just using
// the "this" keyword
// Notice that I use gBrowser here because
// window.gBrowser == document.getElementById("content")
// If gBrowser is not defined then you have bigger problems than your extension.
// Add our page listener(s)
//gBrowser.addEventListener("DOMContentLoaded", function(e) { myExtension.onPageLoad(e); }, true);
gBrowser.addEventListener("load", function(e) { myExtension.onPageLoad(e); }, true);
// Notice we use our onPageLoad even for unload
// because we can tell the type of page event by event.type
// This uses less code
gBrowser.addEventListener("unload", function(e) { myExtension.onPageLoad(e); }, true);
},
onPageLoad: function(e) {
if(e.originalTarget instanceof HTMLDocument) {
var doc = e.originalTarget;
if(!doc.defaultView.frameElement) {
// For top level documents only
var title = (doc.title || "<Untitled>");
var message = "Page Event: \"" + e.type + "\"" + this.eol + title + this.eol + doc.documentURI;
if(this.dumpToConsole) {
this.cs.logStringMessage("myExtension" + this.eol + message);
}
if(this.enableAlerts) {
this.ps.alert(window,"myExtension",message);
}
}
// Do something depending on the event type
/* switch(e.type) {
case "DOMContentLoaded": break;
case "load": break;
case "unload": break;
default: break;
} */
}
},
getPlatform: function() {
var platform = navigator.platform.toLowerCase();
if(platform.indexOf('win') != -1) return 'win'; // win
else if(platform.indexOf('mac') != -1) return 'mac'; // mac
else return 'other'; // other (nix)
},
getEol: function() {
switch(this.getPlatform()) {
case 'win': return '
';
case 'mac': return '\r';
case 'other': return '\n';
default: return '<eol>';
}
}
};
window.addEventListener("load", function(e) { myExtension.onWindowLoad(e); }, false);
Comments
 Subscribe to comments
                    Subscribe to comments
                
                