* Eh. If you want patches, diff 'em yourself. I'm lazy. * Replaced 40-line convert2RegExp(), which is god-knows-how-old, with ~12 lines from the latest Adblock This means Adblock-compatible Full RegExp Support * Corrected a bug stemming from having the user change the baseUri in chrome.rdf, where GM would read scripts from one directory and write them to a different one. * Added a dialog for the user to edit scripts in. (aside to GM leads: if/when you set up remote/updatable/synced/versioned/whatever scripts, you'll save yourselves much trouble and heartache by enforcing a notion of edit priviledges -- instead of letting users edit a script that'll be updated in a day and make their changes vanish, only let them make an editable copy of the script. Of course, that'll be just one drop in the bucket of extra metadata you'll be adding, I suspect. * Removed dependency on the Download Manager. This corrects the very unsightly flash when Install User Script is selected, and is more efficient to boot; we've already downloaded the script to show it to the user, so no need to d/l it again. Replaced 160 lines with... 20? * Also likely fixed the gzip-compression bug (i suspect XMLHttpRequest, used for contextmenu, does it for us) * Refactored most of greasemonkey.js to keep everything in (essentially) one object * Should prevent any conflict with other extensions from sharing common function names (e.g Config). * To give something of a Final Word against "anti-Greasemonkey" scripts, give scripts access to the results from XPCNativeWrapper calls, and guaranteed access to commonly-used functions that may be tampered with by page script. Code like this ensures user scripts always have access to window.addEventListener and friends: window.addEventListener = null; // presumably done by NASTY page script // takes care of JS getters/setters window.addEventListener = document[GreaseMonkey].original(window, 'addEventListener()'); if(!window.addEventListener) // in case it was nullified window.addEventListener = document[GreaseMonkey].functions.addEventListener; window.addEventListener('load', function() { alert('hahaha! Chrome Chrome Chrome!'); }, true); A note: GreaseMonkey is not a defined variable in the window object; there's a an object under a randomly-generated property key, and [GreaseMonkey] is replaced with .randomPropertyName when GM inserts the script. * Prevents pages sniffing for GM. * Tentative Mozilla support Installs, works, uninstalls on Mozilla 1.0