Friday, February 10, 2012

Greasemonkey 0.9.16 Release

The entire list of bugs handled in this release is also available via the 0.9.16 milestone on GitHub. Note that as always it takes some time for Mozilla to review the new version, but it's available on the all versions page immediately.

If you are using it and notice problems, it's best to log an issue or let us know at greasemonkey-dev (and be clear that it's with this version).

Enhancements:
  • Expose information (including Greasemonkey version) to user scripts via GM_info. (#1452; also see #1512)
  • Track the install time of scripts.  (This is designed to better support automatic updates for scripts ... still coming soon.)  (#1513)
Bug fixes:
  • Editing script from the "New User Script" feature, to change any remote dependency (@icon, @require, @resource), could the script to malfunction. (#1504)
  • Enabling/disabling scripts from the status bar menu (Firefox 3 only). (#1506)
  • Incompatibility with GreaseFire.  (#1507)
  • Failures during "Check for Updates" from the Add-on manager. (#1509)

Wednesday, January 25, 2012

Greasemonkey 0.9.15 Release

The entire list of bugs handled in this release is also available via the 0.9.15 milestone on GitHub. Note that as always it takes some time for Mozilla to review the new version, but it's available on the all versions page immediately.

If you are using it and notice problems, it's best to log an issue or let us know at greasemonkey-dev (and be clear that it's with this version).

This release was hurried, to resolve a few serious bugs introduced in 0.9.14. A few other bugs were also fixed.

Bug fixes:
  • Editing an installed script to change any remote dependency (@icon, @require, @resource) could cause one or many scripts to be deleted. (#1466, #1502)
  • Certain @requires can break a script, due to javascript semicolon insertion rules.  (#1491)
  • Toggling the enabled state of a script via the main (Tools > Greasemonkey) menu failed on Mac.  (#1496)
  • Installing a script from local disk failed in 0.9.14.  (#1501)

Friday, January 20, 2012

Greasemonkey 0.9.14 Release

The entire list of bugs handled in this release is also available via the 0.9.14 milestone on GitHub. Note that as always it takes some time for Mozilla to review the new version, but it's available on the all versions page immediately.

If you are using it and notice problems, it's best to log an issue or let us know at greasemonkey-dev (and be clear that it's with this version).

Enhancements:
  • For new script installs, and installed scripts' updates (still not enabled by default) there is a progress meter for the download. (#1419)
Bug fixes:
  • Revert the changes to GM_xmlhttpRequest() in 0.9.13 (which were supposed to have no effect, but created a subtle bug). (#1472)
  • Guarantee that we do not create a specific kind of memory leak.  (#1482)

Thursday, November 03, 2011

Greasemonkey 0.9.13 Release

The entire list of bugs handled in this release is also available via the 0.9.13 milestone on GitHub. Note that as always it takes some time for Mozilla to review the new version, but it's available on the all versions page immediately.

If you are using it and notice problems, it's best to log an issue or let us know at greasemonkey-dev (and be clear that it's with this version).

Enhancements:
  • Script updates install automatically. (#1442)
    In 0.9.12 we added update checking.  In 0.9.13 updates install automatically, but there's still some discussion over how to handle this best (#1455), so checking is still not enabled by default.  We hope to figure this out by the 0.9.14 release.  Some other update related work was done, mostly to make Firefox 3 work better.  (#1421, #1422, #1423)
  • Provide an Options item in the Monkey Menu. (#1447)
  • Add a Cancel button to the Options window. (#1454)
Bug fixes:
  • GM_getResourceText() was broken. (#1438)
  • You can properly select an application (bundle) for the editor on Mac OS X.  (#1439)
  • Fix GM_openInTab() for Firefox 3. (#1444)
  • Fix when pages reassign the location during page load. (#1445)

Friday, October 28, 2011

Greasemonkey Usage by Firefox Version, Oct 2011

Just like August's post, here's a graph of what versions of Firefox people use Greasemonkey with.



You can open the spreadsheet for the raw data and a larger graph.

Takeaways seem to be not a lot has changed, besides some up-and-down for each rapid release version since then (6 came and went, with 7 replacing it).  Firefox 3.6 users are still just shy of three quarters of a million.  Firefox versions too old for the newest version of Greasemonkey are still hanging in at almost a quarter million, and just shy of 50,000 users are running a too-new version of Firefox, probably with Add-on Compatibility Reporter.

Friday, October 21, 2011

Greasemonkey 0.9.13 beta1

Greasemonkey release 0.9.13 should include complete automatic in-the-backgroudn updating of user scripts.  As yet there are no docs for script authors but the short version is: put an @version in your metadata, and increase it when there is an update.

Greasemonkey 0.9.13 beta1 is now available for testing.  It's in the Mozilla Add-ons beta channel. Open the "Development Channel" drop down at the bottom of the page, and click the "Add to Firefox" button.

Please report an issue or find us at the mailing list to provide feedback on beta versions.

Thursday, September 29, 2011

Greasemonkey 0.9.12 Release

The entire list of bugs handled in this release is also available via the 0.9.12 milestone on GitHub. Note that as always it takes some time for Mozilla to review the new version, but it's available on the all versions page immediately.

If you are using it and notice problems, it's best to log an issue or let us know at greasemonkey-dev (and be clear that it's with this version).

Enhancements:
  • Script update checking (limited!). (#1053)
    We have started to build script update checking.  In 0.9.12, it is never automatic in the background.  You may choose to check one script (right click and choose "Find updates") or all scripts ("Check for updates" in the tool menu near the top of the Add-ons Manager).  If updates are found they will then be displayed.  Please use this feature and let us know if it works well, or if it breaks somehow.  Once we're confident that it works, we'll turn it on by default (automatically checking in the background) in a future release.
  • Scripts run with the latest available version of Javascript. (#1403)
Bug fixes:
  • Shared window object. (#1278)
    Before 0.9.0, it was possible to set properties on the window object, and other scripts would be able to read those properties.  This behavior was never supported, but as the compatibility fix that broke it is no longer necessary, it has been reverted.  It is still not suggested that you leverage this quirk, it is not a fully supported feature and may break again in the future.
  • Right-clicking a script in the Monkey Menu works, even when no editor is configured.  (#1405)
  • Fix launching the editor.  (#1409)
  • Scripts with @match could break loading all other scripts.  (#1414)
  • When browsing local files, menu commands for all scripts (on all tabs) no longer display.  (#1424)
  • Fix GM_openInTab(). (#1428)

Friday, September 23, 2011

Try the Greasemonkey 0.9.12 beta!

We've fixed a few bugs and started working on auto-updates for scripts. Please, if you have a chance, download the beta release and test things out.

It's available in the Mozilla Add-ons beta channel. Open the "Development Channel" drop down at the bottom of the page, and click the "Add to Firefox" button.

Please report an issue or find us at the mailing list to provide feedback on beta versions.

Tuesday, September 06, 2011

Greasemonkey 0.9.11 Release

The entire list of bugs handled in this release is also available via the 0.9.11 milestone on GitHub. Note that as always it takes some time for Mozilla to review the new version, but it's available on the all versions page immediately.

If you are using it and notice problems, it's best to either let us know at greasemonkey-dev or log an issue (and be clear that it's with this version).

Bug fixes:
  • Work around for a problem Tab Mix Plus causes when opening links in new tabs. (#1406)

Monday, August 22, 2011

Greasemonkey 0.9.10 Release

The entire list of bugs handled in this release is also available via the 0.9.10 milestone on GitHub. Note that as always it takes some time for Mozilla to review the new version, but it's available on the all versions page immediately.

If you are using it and notice problems, it's best to either let us know at greasemonkey-dev or log an issue (and be clear that it's with this version).

Bug fixes:
  • You will be prompted to pick a new editor if the existing setting is an invalid path. (#1386)
  • Changing views within the Add-ons Manager could cause the user script sort order to be wrong. (#1394)
Enhancements:
  • When a script causes an unhandled error, the display in the Error Console will be a bit easier to read. (#1396)
  • When Growl is not installed, Greasemonkey's notifications are less obtrusive. (#1397)
  • A range of internal code clean ups. (#1395, #1398, #1399, #1400, #1401)

Friday, August 12, 2011

Greasemonkey 0.9.9 Release

Update: Mozilla did not pass this version for review. Since 0.9.10 was already underway, their requested changes were made there. This version never really hit a public release.

The entire list of bugs handled in this release is also available via the 0.9.9 milestone on GitHub. Note that as always it takes some time for Mozilla to review the new version, but it's available on the all versions page immediately.

If you are using it and notice problems, it's best to either let us know at greasemonkey-dev or log an issue (and be clear that it's with this version).

Bug fixes:
  • Pressing 'back' could rarely cause a script to run twice on the same page. (#1083)
  • Extended characters would get corrupted in new scripts. (#1236, #1315)
  • A full disk could cause loss of data (especially config.xml). (#1301)
  • (Affecting 0.9.8) Scripts would not install (all scripts in Firefox 3: #1389, always for certain scripts: #1391)
Enhancements:
  • GM_xmlhttpRequest() provides progress events. (#1081)
  • GM_xmlhttpRequset() provides a synchronous mode. (#1269)
  • By popular demand: a UI for editing @includes and @excludes. (#1362)

Friday, August 05, 2011

Greasemonkey Usage by Firefox Version, August 2011

I'm revisiting the Greasemonkey usage topic. A short while back, we decided to drop support for Firefox 3.0 from new versions of Greasemonkey, somewhat based on the similar work I did back then. But I realize that last graph wasn't very well done, it didn't reveal the 3.x usage clearly. So here's an interactive trend graph that makes it much more obvious:


(Access the raw data and a larger graph at Google Docs.)

It turns out that Firefox 3.5 is even less used than 3.0, both well under 5%. On the other hand, as mentioned, 3.6 is still 25% of usage. It may well mean that we drop 3.5 support and take advantage of some of the behind-the-scenes things available only in 3.6 and higher very soon.

P.S. There's also some graphs, by major version, and minor version within 0.9, of Greasemonkey usage.

Nerd alert: To make this graph, I started with the AMO statistics, and passed it through a python script to clean up and combine the (patch level) versions. By hand, I rearranged the data into a 7-day moving average for the versions I was interested in: 3.0 and higher.

Monday, August 01, 2011

Greasemonkey 0.9.8 Release

Bug fixes:
  • User scripts cannot run in any about: pages besides about:blank. (Security enhancement; #1375)
Enhancements:
  • Global, user specified, @exclude rules. (#1002)
  • New @run-at metadata imperative, which supports value document-start, as well as the standard document-end behavior. Please see the documentation. (#1103)
  • Support for @match metadata imperative, as implemented by Google Chrome. Thanks to Scriptish for original implementation. (#1377)
  • Support for full regular expression syntax in @include/@exclude rules. Please see the documentation. (#1378)
The entire list of bugs handled in this release is also available via the 0.9.8 milestone on GitHub. Note that as always it takes some time for Mozilla to review the new version, but it's available on the all versions page immediately.

If you are using it and notice problems, it's best to either let us know at greasemonkey-dev or log an issue (and be clear that it's with this version).

Thursday, July 14, 2011

Greasemonkey 0.9.7 Release

Bug fixes:
  • Scripts with broken @icons will install, just with no icon. (#1214)
  • Editing the @icon line of a script will take effect immediately. (#1215)
  • Remote resources (@require, @resource, @icon) that redirect to other URLs will now work. (#1222)
Enhancements:
  • Compatibility with Firefox 6 and 7. (#1357)
  • GM_openInTab() will respect the insertRelatedAfterCurrent preference. (#1370)
The entire list of bugs handled in this release is also available via the 0.9.7 milestone on GitHub. Note that as always it takes some time for Mozilla to review the new version, but it's available on the all versions page immediately.

If you are using it and notice problems, it's best to either let us know at greasemonkey-dev or log an issue (and be clear that it's with this version).

Friday, July 08, 2011

Greasemonkey Usage by Firefox Version, July 2011

I wrote a very similar post three months ago, but there's been a lot of real motion along Mozilla's fast release track since then. It's worth revisiting these numbers:Click for a larger image, or browse the data in Google Docs, with a larger view and a line chart as well.

This stacked area chart makes a few of trends obvious: Firefox 4 became very popular over its short life, and Firefox 5 is quickly replacing it. But also: Firefox 3.6 is definitely still kicking, at the second most common browser over the past week. Here's some data; the average daily usage for each version over the past week:
  • 5.0 1,589,647
  • 3.6 798,062
  • 4.0 461,349
  • 3.0 150,314
  • 3.5 117,740
  • 2.0 13,144
  • 6.0 2,596
  • 7.0 1,990
  • 1.5 392
Or: Version 3.x (1,066,116) is still one third of total usage (3,135,233). And even if 4.0 is dropping quickly, right now it's still almost a quarter of the total post-3 users.

Friday, June 24, 2011

Greasemonkey 0.9.6 Release

Bug fixes:
  • GM_openInTab() fails in Firefox 3. (#1361)
  • Firefox 5: Error in Add-ons Manager. (#1367)
Enhancements:
  • Add "get user scripts" link to the Add-ons Manager. (#1213)
  • Pass site cookies when downloading scripts. (#1359)
The entire list of bugs handled in this release is also available via the 0.9.6 milestone on GitHub. Note that as always it takes some time for Mozilla to review the new version, and it's available on the all versions page. If you are using it and notice problems, it's best to either let us know at greasemonkey-dev or log an issue (and be clear that it's with this version).

Thursday, May 26, 2011

Greasemonkey 0.9.5 Release

Primarily because a serious issue was found in the not-yet-reviewed 0.9.4, version 0.9.5 has been hurried out.

Bug fixes:
  • Installing and uninstalling the same script many times does not work properly. (#1353)
  • GM_xmlhttpRequest() does not work in Firefox 5 betas. (#1354)
  • (Introduced in 0.9.4:) Cannot enable nor disable scripts. (#1355)
  • Installing the first user script while the user scripts pane of the add-ons manager is open leaves the "no user scripts" warning. (#1356)
Enhancements:
  • The installation dialog shows the script version, if provided with @version. (#1349)
The entire list of bugs handled in this release is also available via the 0.9.5 milestone on GitHub. Note that as always it takes some time for Mozilla to review the new version, and it's available on the all versions page. If you are using it and notice problems, it's best to either let us know at greasemonkey-dev or log an issue (and be clear that it's with this version).

Tuesday, May 24, 2011

Greasemonkey 0.9.4 Release

Bug fixes:
  • The GM_openInTab() API again returns a handle to the window object. (#1298)
  • Using alert() will not break setTimeout() nor GM_xmlhttpRequest(). (#1318)
    NOTE: we currently only have a work-around in place, watch mozilla bug 647727 for a real fix.
Enhancements:
  • When re-ordering execution of scripts: clicking the first/last item disables sooner/later items, and picking any of these will switch to Execution Order sort (if it is not already selected).
  • Removed the detail view for user scripts, which did not contain any more information than the list view.
The entire list of bugs handled in this release is also available via the 0.9.4 milestone on GitHub. Note that as always it takes some time for Mozilla to review the new version, and it's available on the all versions page. If you are using it and notice problems, it's best to either let us know at greasemonkey-dev or log an issue (and be clear that it's with this version).

Thursday, April 28, 2011

Greasemonkey 0.9.3 Release

Bug fixes:
  • Error message logged ("Redeclaration of const document")/high CPU usage when closing the sidebar. (#1226, #1298)
  • Navigating to a .user.js inside a frame works like anywhere else. (#1248)
  • The list of user scripts in the Add-ons Manager would sometimes forget its sort order. (#1307)
  • Compatibility enhancement with AutoPager (broken in 0.9.2). (#1344)
  • Passing a non-function to GM_registerMenuCommand()'s commandFunc broke the entire menu, and items showed up in the wrong order (both broken in 0.9.2). (#1346, #1347)
Enhancements:
  • Passing the Referer header works, for GM_xmlhttpRequest(). (#1240)
  • Accessibility: The sort buttons in the Add-ons Manager work with keyboard input (space/enter). (#1345)
The entire list of bugs handled in this release is also available via the 0.9.3 milestone on GitHub. Note that as always it takes some time for Mozilla to review the new version, and it's available on the all versions page. If you are using it and notice problems, it's best to either let us know at greasemonkey-dev or log an issue (and be clear that it's with this version).

Wednesday, April 20, 2011

Breaking change: Inject into about:blank?

Back in version 0.8.2 we patched a security/privacy hole by preventing injection into file: and about: scheme URLs. This was August 2009, and at the time we specifically allowed about:blank (while blocking the rest of about:). A carefully crafted web search, [site:userscripts.org/scripts/review/ "about:blank" -"src about:blank"] reveals (among plenty false positives just making frames/windows that start blank) that real scripts are using this feature. Examples include:
Then there's scripts specifically avoiding about:blank:
Yes, I ended up finding only one real script using this feature. In much the way that I imagined it way back when. But I found four specifically trying to avoid it.

We now know of one real, serious bug with this approach. It happens to have an easy workaround, but really brings to light the issue: The about:blank page has a sort of special meaning. In this bug we know about, the browser is using a navigation to about:blank as a sort of clean-up, meaning "this content is gone", much like assigning null as a cleanup activity in some programming languages.

Therefore our current plan is to not inject scripts into about:blank unless the @include rule specifically mentions it. So if you say @include about:blank#mycustomvalue then everything will work as it does. But if you say @include * (or rely on that default) then you will not run on about:blank. Current plans would include this change in the upcoming version 0.9.3.

(As always, please find us on greasemonkey-dev to discuss the development of Greasemonkey itself.)

Tuesday, April 05, 2011

Greasemonkey 0.9.2 Release

This release primarily fixes some of the problems discovered since 0.9.0.

Bug Fixes:
  • Failure on OSX when Growl is installed, but not running. (#1264)
  • Incorrect display of Greasemonkey icon in Add-ons window (Firefox 3.6, OS X). (#1284, #1291)
  • Provide a sort bar, to control display order of the scripts in the Add-ons manager, for Firefox 4. (#1293)
  • Remove "accelerator" keys from GM_registerMenuCommand(). (#1312, previously)
  • Work around incompatibility with Personas Plus extension. (#1253)
Enhancements:
  • Provide a toolbar button, and remove the status bar icon for Firefox 4. (#1227)
  • When re-installing a script (e.g. for an update), keep it in the same execution order. (#1267)
  • Keep the add-ons manager view up to date when changing (installing/enabling/disabling/etc) user scripts. (#1305)
It should be available soon, pending normal delays for review.

Greasemonkey Usage, by Firefox Version, April 2011

I'd like to take the opportunity to review the current usage profile of Greasemonkey, as it relates to Firefox version. There's a couple points to be made, in regards to the work we've been doing recently on the 0.9 version branch of Greasemonkey. This data all comes from the addons.mozilla.org statistics for Greasemonkey.


First, we can quickly note that Firefox 1.x and 2.x combined total only one half of one percent of current usage. This is why we decided to up the minimum compatible version to 3.0. It wasn't worth the effort to try to keep things working in earlier browsers.

Also, now that Firefox 4.0 is out for a while, we can see why we went to 3.0 minimum, and not 4.0. So far only about one fifth of our users have upgraded. For everyone else, we think the recent enhancements we've been making are worth having, so we've taken special effort to make sure that we stay working in Firefox 3, and don't rely on features only available in Firefox 4. Over time, perhaps that will change. The slope is quite steep right now, but if history is any guide, there will be a substantial minority of users that stick with Firefox 3 for some time.

For reference, here's the exact data.

Friday, April 01, 2011

GM_registerMenuCommand() losing "accelerator key" feature

Script authors, take note: I'm planning on moving forward with a change to remove a small part of the functionality of GM_registerMenuCommand(). This post is to explain what part, and the justification for doing so.

With the release of Firefox 4, Mozilla has made some grand changes to the look and feel of the browser. They've moved tabs to the top, emphasized the Firefox Button over the menu bar, and removed the status bar (providing the addons bar as a temporary shim for extension compatibility). This led us to re-build parts of Greasemonkey to focus on providing a toolbar, and de-emphasize the old "monkey menu" in the status bar.

It turns out that the menu code, now controlling the Tools > Greasemonkey menu, the old status bar monkey menu (in Firefox 3.x), and the new toolbar button's menu, also controls the commands for GM_registerMenuCommand() (to put them in the menu, of course!), which also controls the "accelerator keys" for those commands.

These accelerator keys have, more or less, never worked. I've written a test script (see the source, or install it) to demonstrate this. Once installed, navigate to the page about:blank#GM_rmc (you might need to hit reload, depending on how you open this) to run the script. Pick any combination of modifiers, and a letter for the accelerator key. Then try to use that accelerator key.

I'm testing on Firefox 3.6 and Greasemonkey 0.8 -- the last versions before some of these big changes started, where everything should still be as reliable as it ever was.

I ran this test: Close Firefox, launch it to the test page with only one tab open. Register a single menu command. Open the monkey menu, click on the menu item and see the alert. Press the accelerator key. No alert. I repeated this whole process for: Shift+Ctrl+Q, Alt+Shift+X, Control+M. None of it works. I saw it working with at least one earlier attempt, but even then it was fragile: normal actions like loading pages or closing tabs caused otherwise working keys to fail.

I tried a super-simple script and it too doesn't work. Installing it and pressing Ctrl+Shift+C gives me no results, but selecting the menu item does.

I've asked on our mailing list, I've asked at userscripts.org, and I've held discussions with developers. I can't find anyone that will regret losing accelerator key support in GM_registerMenuCommand(), and all my attempts to make it work well have so far failed.

So it is going to be removed, in Greasemonkey 0.9.2. Unless I hear from someone that can show me that I've been a fool, it does work, and I'm using it wrong. Please use the mailing list to get in touch with us if so!

Monday, January 24, 2011

Greasemonkey 0.9.1 Release

This is primarily a quick release to deal with bugs found in 0.9.0.

Bug fixes:
  • Fix user script sandbox wrapping. This deals with lots of problems like eval(). (#1258, also #1254, #1260, #1263, #1265)
    If your script(s) stopped working with 0.9.0, this should fix them.
  • Fixed rare bug when installing scripts. (#1250)
  • Fixed errors when Growl is not installed on Mac OS X. (#1249)
  • Fixed problems with relative @require imperatives. (#1262)
New features/improvements:
  • Allow sorting by descending (as well as ascending) execution order. (#1217)
Known issues:
  • Incompatible with All-in-One Sidebar. (#1252)
  • Incompatible with Personas extension. (#1253)

Problems with version 0.9.0

Unfortunately, a number of problems with the recent 0.9.0 release were discovered only after it saw full public release, rather than before that, in one of our Release Candidates.

There are a few small problems related to scripts installing and running -- these are fixed, and the fixes should be released very soon.

There are also known problems with All-in-One Sidebar, and the Personas extension. These are more serious problems, and the only solution right now is to disable one or the other extension.

Keep your eyes open for release 0.9.1 which should be coming out Real Soon Now.

Tuesday, January 18, 2011

Greasemonkey 0.9.0 Release

It's been a long time coming, but it should be worth the wait! The next major release of Greasemonkey, version 0.9.0, is ready. Let's dive right into the new features:

New Features:
  • Compatibility with Firefox 4! Note that because of Firefox bug 612025 this is somewhat unsafe for 4.0b7 to 4.0b9 (inclusive). Beta 10 should be fixed (the nightly build on January 14th definitely is). Firefox 4 support is still preliminary. Everything probably works, but not everything works really well. The backlog of bugs for the next release is primarily focused on this.
  • Complete integration with the standard Firefox Add-ons dialog, treating User Scripts as just another kind of browser add-on.
    For Firefox 3, the User Script management dialog now looks like:

    And for Firefox 4.0:
  • A global options dialog, where the script editor can always be selected. (#1012, #1109)
  • Live in-place editing for the entire script, including metadata (@name, @require, @include, @exclude, etc.). (#1148, #1157, #1165)
  • Web pages that end in .user.js are loaded as normal, instead of being installed as a user script. (#1184)
Bug fixes / minor enhancements:
  • All Greasemonkey windows respond to standard close window keyboard shortcuts. (#1085)
  • Support for @icon metadata imperative, displayed in the new add-ons manager integration. (#1096)
  • Support user and password for GM_xmlHttpRequest(). (#1100)
  • Support @version metadata imperative. (#1110)
  • Suppress spurious Error: not well-formed (// ==UserScript==) error messages. (#1134)
  • The "install" menu item is removed. (#1196)

Loading image

Click anywhere to cancel

Image unavailable

Loading image

Click anywhere to cancel

Image unavailable

Thursday, April 08, 2010

Greasemonkey 0.8.6 Release

The sixth release in the 0.8 series of Greasemonkey, this release includes:

Features:
  • Add a hidden preference to allow greasing the unmht: scheme. (#1038)
  • Allow relative URLs to be used for GM_xmlhttpRequest(), just like standard XMLHttpRequest. (#1057)
  • Performance enhancements and code improvements to internal logic behind @include and @exclude rules. (#1070 #1074 #1089)
  • Added translations: ca-ES, cs, fr, nl, sr-RS, vi.
Bug fixes:
  • GM_xmlhttpRequest() can fail when Object.prototype has been modified. (#1065)
  • Two warnings upon making new script via "New User Script". (#1069)
  • Installing scripts from the hard drive (instead of via the web) can fail. (#1077)
  • Fix a flaw that could allow websites to prevent Greasemonkey from running. (#1082)
  • Error "this.menuCommanders is undefined" bug when closing a browser window. (#1087)
  • Error "ScriptDownloader is not defined" when performing view source on a user script. (#1091)

Tuesday, February 02, 2010

Greasemonkey 0.8.5 Release

Greasemonkey 0.8.5 is a maintenance release, with these fixes and improvements:
  • Add an abort() method for GM_xmlhttpRequest. (#1007)
  • Increase compatibility with bleeding-edge Firefox versions. (#1054)
  • Display a "welcome" page to new users when they install. (#1006)
  • Fix hooking into the console object for Firebug 1.5.
Thanks very much to our users on the mailing list that caught a few issues in the release candidates.

Tuesday, December 08, 2009

Greasemonkey 0.8.4 released

Hot on the heels of 0.8.3 is a single critical bugfix in 0.8.4:
  • Properly specify the .finalUrl for GM_xmlhttpRequest results. (#1063)

Greasemonkey 0.8.3 Release

Greasemonkey 0.8.3 aka "0.8.20091129.3" has been released. It contains the following changes:
  • Add Firefox 3.6 compatibility flag.
  • Use platform-dependent line endings when creating a script file. (#1004)
  • Properly handle error events, and calling the onerror callback, in GM_xmlhttpRequest. (#1008)
  • Add 'binary' option, to do a .sendAsBinary(), for GM_xmlhttpRequest. (#1017)
  • GM_setValue() will display a descriptive error, when it does not receive enough arguments. (#1005)
  • Fixed a bug that would cause the Greasemonkey info bar not to appear sometimes, when viewing a script's source.
  • Updated translations from babelzilla.org.

Wednesday, November 25, 2009

Greasemonkey API Usage

I've been intending to write this post for months, but various things got in the way. Well, it's finally ready! Some of my ideas for Greasemonkey 1.0 would involve major changes to the way that Greasemonkey runs user scripts. The goals would be to make user script authoring easier, by removing some of the quirks, limitations, and problems that Greasemonkey's current security architecture imposes.

To begin, an aside: why does Greasemonkey have a security architecture that imposes limitations and problems on script authors? It's basically history now, but in short: Greasemonkey provides the powerful-but-dangerous capability for user scripts to break the same-origin policy for AJAX requests. Lots of useful scripts have been created that hinge on this capability. Unfortunately, it is indeed powerful, and Greasemonkey by nature mashes itself and the user scripts up with any old web page that you might visit. If Greasemonkey and/or a script it is running presents a vulnerability that the content page can leverage, all sorts of nasty things could result, from stealing your bank account, creating false ecommerce purchases, stealing the content of your private files or site data, and so on.

The point of this post, then, is to examine the landscape for user scripts today. Discover what scripts are out there, what they are like, and how they operate. What kind of changes to Greasemonkey would make these scripts stop working? What kinds of changes could we make with minimal impact? Toward that end, I've got three graphs to show you (with the raw data below).

To perform this analysis, I downloaded over thirty six thousand scripts from userscripts.org. This is by no means the entire population of user scripts out there, but I believe it is a good representative sample. I wrote a python script to read their source and (a bit crudely, but well enough) parse their contents and metadata. The first thing I was interested in seeing is how common the usage of the various GM_ apis are.

The first thing that we can quickly see is that well over half the scripts, 58.87%, use no special API calls at all. No matter what happens to the GM_ APIs, they'll keep working just fine. The most common API call is the get/set value call, at 16.50%. The cross-domain AJAX call is a close second at 15.51%, with GM_addStyle next at 12.95%. From here things trail off rapidly, but we see how common unsafeWindow and eval are, both with the potential to be very dangerous.

Browsers are progressing rapidly, however. Instead of get/set value, one could use DOM Storage, and HTTP Access Control standards, for making cross-domain requests, are being standardized. What's important to know is if the extra power provided by these APIs is actually being used, or whether these sorts of stand-ins could be a viable replacement. To investigate that, I examined how many different domains scripts are @included into when making these calls, and which URLs the AJAX calls are being made to.

The vast majority of get/set value calls (76.33%) are made by scripts that are only ever @include'd into a single domain. For these scripts, DOM Storage would work perfectly. Some execute on two, and almost none on more than two. Some also execute on every page, and this starts to be a problem. The AJAX patterns are very different.

Note importantly that my script was a bit naive with AJAX domain gathering. It used simple string manipulation to find URLs inside GM_xmlhttpRequest calls. If the URL was set in a variable, elsewhere, then the script did not find it. So of 5600 scripts that call GM_xmlhttpRequest, only 2693 were "understood" by my script -- and this may be a bad sample. Scripts that exclusively set their URLs in variables/constants may be more likely to make cross-domain requests, or even perhaps less likely.

That said: an obvious pattern emerges: plenty of scripts do "@include *" then AJAX off, likely to some other, fixed, site (20.16%). (Note: lots of these appear to be update checkers, which should hopefully be unnecessary before 1.0.) Plenty also seem to operate fully within one site (20.87%). By far the most, however, operate on one site and call another (46.79% or 1260 distinct scripts). Larger combinations of sites are minimal. Part of this group is oversimplification in my script, an @include of "*flickr.com" and an AJAX call to "flickr.com" are counted separately. Most though are the especially useful scripts that, for example, include IMDB data on Netflix, or vice versa. So, this is far too large a use case to break. Whatever we do, it seems cross-domain AJAX is going to have to remain.

Finally, I also took a look at the usage of metadata imperatives: both the "official" ones that actually affect how Greasemonkey works, and the others that are used in other tools, or added for the author's own purposes. That looks like:

Generally what I expected. Most everyone has an @name and an @include, nearly as many include an @description and @namespace. Things fall off rapidly from there, but the unofficial @version is next, and an unusual (to me) @author. From there we fall twoard the single-digit range, finding that @require and @resource are still very rarely used.

Conclusions: Over half of user scripts use no privileged APIs. All of Greasemonkey's security mechanisms are a pure hindrance to all these scripts. If it went away, they would benefit greatly. It may be possible to remove get/set value in favor of DOM Storage, but the potential damage of these APIs is so small that the cost likely outweighs the benefit. Although a minority (15.51%) of scripts use GM_xhr, it's still too many to consider removal.




Edit: Fixed GM_getResourceURL count, I first searched for "Url" and not "URL", explaining the zero found, before.



To those that are interested: the script that I used to generate these numbers is available for inspection, in case it perhaps contains a serious bug. The data that I generated with it, and the charts above, are also available to check.

Saturday, September 26, 2009

Greasemonkey "0.8.2" Released

The latest version of Greasemonkey, "0.8.2" (full version: 0.8.20090920.2) has been uploaded to AMO. It includes the following changes:
  • Do not inject scripts into file: and about: URLs by default, for security reasons. (#1000)
  • The GM_openInTab() function respects the background loading tab behavior from Firefox preferences. (#1003)
  • Specify label/control associations in "New Script" dialog, for accessibility. (#1010)
  • Minor code clean ups and improvements. (#1011, #1020)
  • Remove "forced" upgrade code. (#1013)
  • Remove extra spacing around the status bar icon. (#1014)
  • When adding include/exclude rules, include the port number in the default suggestion. (#1015)
  • Reduce noise logged to the console when interacting with Firebug. (#1018)
  • Apply security checks to GM_listValues() and GM_deleteValue(). (#1019)
  • Fix missing localized strings in various locales. (#1022)
  • Grease pages loaded into the sidebar. (#1023)
  • Allow user scripts to access the latest available JavaScript engine. (#1026)
This is the same file posted as RC2 about a week ago to the -users mailing list. As the version number (and the release notes) indicate, this is a maintenance release, fixing bugs and adding minor features to the previous release.

Friday, September 18, 2009

Who Uses Greasemonkey, Part 2

I'd like to follow up my earlier post, analyzing which browsers Greasemonkey is used in. This time, a view on the operating systems where Greasemonkey is used. This is generally less interesting information -- it closely mirrors the market share of the OSes. But it's one more bit of detail we can derive from the AMO stats.

This graph probably isn't very surprising. It shows that Mac has become more popular in the last year. Some detail on the last four weeks:

Another view on the same detail. The exact underlying numbers involved:

OSUsersPercent
Windows253182991.50%
Mac1642825.94%
Linux691862.50%
Other16900.06%

Like I said at the beginning, generally the breakdown of the operating systems in general. Even so, the eight or nine percent of users on Mac or Linux make up nearly a quarter of a million users.



Like before, the numbers and charts are visible on Google Docs. No script this time, the work was easy enough to do by hand.

Saturday, September 05, 2009

Who Uses Greasemonkey?

As Johan and I begin to take over development of Greasemonkey, one of the important questions we need to answer is: which platforms should we support? We can inform this decision with some of the usage statistics that Mozilla Add-Ons gathers.

The statistics page for Greasemonkey is visible to everyone. The raw data is even available for download. But it can be hard to read, due to the level of detail and formatting that is applied. So, I've taken the time to analyze it carefully. The first interesting thing that we can see is the usage trends over time:

(Looks like Mozilla had a reporting issue around May of 2009.)

I've also made a pie-graph of app usage, for the average values of the past 4 weeks:

That pie chart represents these numbers:

AppUsersPercent
Firefox/<=1.05980.02%
Firefox/1.555020.21%
Firefox/2.01139214.31%
Firefox/3.0147058455.70%
Firefox/>=3.5104909239.74%
Other4460.02%


So, let's say first off: we know this is a bad measurement. There's (almost) no "other" because there's no official support for other platforms, so only third party alterations make this usage possible. Thus, this data doesn't help us answer (i.e.) "Should we support Flock?" or "Should we support SongBird?".

It does let us know a little bit about what versions of Firefox we should support. All of 1.0 and 1.5 make up only 0.23% of the user base. Firefox 3.0 and 3.5 make up 95.44% of the user base. Firefox 2, however, makes up 4.31% of the user base. That's a much harder call.



Hackers: The raw data and charts behind this post is available on Google Docs. You can also see the python script that turned AMO's raw data into this presentation.

Wednesday, August 26, 2009

Greasemonkey Lives At GitHub

Months ago, the people running DevjaVu let us know that they were shutting the service down. It's unfortunate, but they cannot be faulted. They're still running now, but there's no saying how long that will remain for. As of today, the ability to change tickets (both creating and commenting, for all but pre-existing project members) has been revoked.

Greasemonkey now lives at GitHub, both for source code hosting, and issue tracking. We expect that the distributed nature of git should allow freer forking and branching, and easier collaboration with anyone; rather than the limited set of people who were granted SVN commit access, in earlier days.

If you notice any existing links outside of DevjaVu pointing into it, please let us know at the greasemonkey-dev mailing list. If you see someone suggesting the DevjaVu site, please correct them and let everyone involved know that GitHub is now the official code and issue host for Greasemonkey.

Thanks, and if you want to contribute, send those pull requests!

Sunday, August 23, 2009

Outie

[This is a repost of a message I also sent to greasemonkey-dev]

It's been a long time since I've been working on Greasemonkey actively. During the time I was away Johan Sundström and Anthony Lieuallen picked up the slack and did the last few releases without my help.

So I've decided to officially hand over the reins to them. What this means practically is that they will be the ones accepting patches, doing releases, and tending the bugs. I also hope that this change will reinvigorate the project, as it has been moving slowly for some time.

I'll still be lurking of course, but Johan and Anthony will be responsible for day-to-day administration now. I know they'll do a great job.

Monday, January 05, 2009

Greasemonkey Release 0.8.20090123.1

In preparation for Firefox 3.1, we're releasing a new version of Greasemonkey, marked as compatible with Firefox 3.1b2, along with additional changes and fixes:
  • Added translations: ar-SA, bn-IN, hu-HU, id-ID, ro-RO, sr-RS, vi-VN.
  • Fix for ticket #111 (anomalous separators in the monkey menu).
  • Add GM_deleteValue() and GM_listValues() APIs (#38).
  • Restore the anonymous function wrapper around scripts, and thus the same behavior as versions prior to 0.8 (by default, removable with the @unwrap metadata imperative, #108).
  • Improved interaction with the Firebug console (#122, #204).