<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: greasemonkey</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/greasemonkey.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2020-02-28T19:39:31+00:00</updated><author><name>Simon Willison</name></author><entry><title>Wildcard: Spreadsheet-Driven Customization of Web Applications</title><link href="https://simonwillison.net/2020/Feb/28/wildcard-spreadsheet-driven-customization-web-applications/#atom-tag" rel="alternate"/><published>2020-02-28T19:39:31+00:00</published><updated>2020-02-28T19:39:31+00:00</updated><id>https://simonwillison.net/2020/Feb/28/wildcard-spreadsheet-driven-customization-web-applications/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.geoffreylitt.com/wildcard/salon2020/"&gt;Wildcard: Spreadsheet-Driven Customization of Web Applications&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
What a fascinating collection of ideas. Wildcard is a browser extension (currently using Tampermonkey and sadly not yet available to try out) which lets you add “spreadsheet-driven customization” to any web application. Watching the animated screenshots in the videos helps explain what this mean—essentially it’s a two-way scraping trick, where content on the page (e.g. Airbnb listings) are extracted into a spreadsheet-like table interface using JavaScript—but then interactions you make in that spreadsheet like filtering and sorting are reflected back on the original page. It even has the ability to serve editable cells by mapping them to form inputs on the page. Lots to think about here.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=22439141"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/spreadsheets"&gt;spreadsheets&lt;/a&gt;&lt;/p&gt;



</summary><category term="greasemonkey"/><category term="spreadsheets"/></entry><entry><title>OCR and Neural Nets in JavaScript</title><link href="https://simonwillison.net/2009/Jan/25/ocr/#atom-tag" rel="alternate"/><published>2009-01-25T00:00:28+00:00</published><updated>2009-01-25T00:00:28+00:00</updated><id>https://simonwillison.net/2009/Jan/25/ocr/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://ejohn.org/blog/ocr-and-neural-nets-in-javascript/"&gt;OCR and Neural Nets in JavaScript&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
John dissects the brilliant Greasemonkey script that solves simple captchas using the canvas element and HTML5’s getImageData API.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/captchas"&gt;captchas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/getimagedata"&gt;getimagedata&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/john-resig"&gt;john-resig&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ocr"&gt;ocr&lt;/a&gt;&lt;/p&gt;



</summary><category term="canvas"/><category term="captchas"/><category term="getimagedata"/><category term="greasemonkey"/><category term="javascript"/><category term="john-resig"/><category term="ocr"/></entry><entry><title>Crowbar</title><link href="https://simonwillison.net/2009/Jan/24/crowbar/#atom-tag" rel="alternate"/><published>2009-01-24T23:52:55+00:00</published><updated>2009-01-24T23:52:55+00:00</updated><id>https://simonwillison.net/2009/Jan/24/crowbar/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://simile.mit.edu/wiki/Crowbar"&gt;Crowbar&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Headless Gecko/XULRunner which exposes a web service API for screen scraping using a real browser DOM—just pass it the URL of a page and the URL of a screen scraping JavaScript script (a bit like a Greasemonkey user script) and get back RDF/XML.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/crowbar"&gt;crowbar&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/dom"&gt;dom&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gecko"&gt;gecko&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mozilla"&gt;mozilla&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rdf"&gt;rdf&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scraping"&gt;scraping&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webservice"&gt;webservice&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/xml"&gt;xml&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/xulrunner"&gt;xulrunner&lt;/a&gt;&lt;/p&gt;



</summary><category term="crowbar"/><category term="dom"/><category term="gecko"/><category term="greasemonkey"/><category term="mozilla"/><category term="rdf"/><category term="scraping"/><category term="webservice"/><category term="xml"/><category term="xulrunner"/></entry><entry><title>BUG: XSS Security flaw in BaseCamp Messages</title><link href="https://simonwillison.net/2008/Jun/26/bug/#atom-tag" rel="alternate"/><published>2008-06-26T09:39:20+00:00</published><updated>2008-06-26T09:39:20+00:00</updated><id>https://simonwillison.net/2008/Jun/26/bug/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://forum.37signals.com/basecamp/forums/5/topics/3155"&gt;BUG: XSS Security flaw in BaseCamp Messages&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
BaseCamp lets users include HTML and JavaScript in messages, on the basis that anyone with a BaseCamp account is a trusted party. I’m not convinced: you could use this to circumvent BaseCamp’s access control stuff and read messages you’re not meant to. On the flip side, you could also use this to add brand new features to BaseCamp by using JavaScript in a message as a server-side equivalent to Greasemonkey.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://news.ycombinator.com/item?id=228347"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/37signals"&gt;37signals&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/basecamp"&gt;basecamp&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/xss"&gt;xss&lt;/a&gt;&lt;/p&gt;



</summary><category term="37signals"/><category term="basecamp"/><category term="greasemonkey"/><category term="javascript"/><category term="security"/><category term="xss"/></entry><entry><title>google-axsjax</title><link href="https://simonwillison.net/2007/Nov/14/googleaxsjax/#atom-tag" rel="alternate"/><published>2007-11-14T17:18:38+00:00</published><updated>2007-11-14T17:18:38+00:00</updated><id>https://simonwillison.net/2007/Nov/14/googleaxsjax/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://code.google.com/p/google-axsjax/"&gt;google-axsjax&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
“The AxsJAX framework can inject accessibility enhancements into existing Web 2.0 applications using any of several standard Web techniques”—including bookmarklets and Greasemonkey. The enhancements conform to W3C ARIA, supported by Firefox 2.0 and later.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://google-code-updates.blogspot.com/2007/11/introducing-axsjax-access-enabling-ajax.html"&gt;Google Code Blog&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/accessibility"&gt;accessibility&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ajax"&gt;ajax&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/aria"&gt;aria&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/axsjax"&gt;axsjax&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/bookmarklets"&gt;bookmarklets&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/firefox"&gt;firefox&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google"&gt;google&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/w3c"&gt;w3c&lt;/a&gt;&lt;/p&gt;



</summary><category term="accessibility"/><category term="ajax"/><category term="aria"/><category term="axsjax"/><category term="bookmarklets"/><category term="firefox"/><category term="google"/><category term="greasemonkey"/><category term="javascript"/><category term="w3c"/></entry><entry><title>Gmail Greasemonkey API</title><link href="https://simonwillison.net/2007/Nov/7/gmail/#atom-tag" rel="alternate"/><published>2007-11-07T10:38:38+00:00</published><updated>2007-11-07T10:38:38+00:00</updated><id>https://simonwillison.net/2007/Nov/7/gmail/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://code.google.com/p/gmail-greasemonkey/wiki/GmailGreasemonkey10API"&gt;Gmail Greasemonkey API&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The new version of Gmail includes API hooks for Greasemonkey script authors. The documentation is by Mark Pilgrim, author of Greasemonkey Hacks.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://blog.persistent.info/2007/11/macros-for-new-version-of-gmail.html"&gt;Mihai Parparita&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/gmail"&gt;gmail&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google"&gt;google&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mark-pilgrim"&gt;mark-pilgrim&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mihai-parparita"&gt;mihai-parparita&lt;/a&gt;&lt;/p&gt;



</summary><category term="gmail"/><category term="google"/><category term="greasemonkey"/><category term="javascript"/><category term="mark-pilgrim"/><category term="mihai-parparita"/></entry><entry><title>Site-specific browsers and GreaseKit</title><link href="https://simonwillison.net/2007/Oct/25/sitespecific/#atom-tag" rel="alternate"/><published>2007-10-25T07:56:01+00:00</published><updated>2007-10-25T07:56:01+00:00</updated><id>https://simonwillison.net/2007/Oct/25/sitespecific/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://factoryjoe.com/blog/2007/10/23/site-specific-browsers-and-greasekit/"&gt;Site-specific browsers and GreaseKit&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
New site-specific browser tool which lets you include a bunch of Greasemonkey scripts. For me, the killer feature of site-specific browsers is still cookie isolation (to minimise the impact of XSS and CSRF holes) but none of the current batch of tools advertise this as a feature, and most seem to want to share the system-wide cookie jar.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/chris-messina"&gt;chris-messina&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/cookies"&gt;cookies&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/csrf"&gt;csrf&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/greasekit"&gt;greasekit&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/safari"&gt;safari&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sitespecificbrowsers"&gt;sitespecificbrowsers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webkit"&gt;webkit&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/xss"&gt;xss&lt;/a&gt;&lt;/p&gt;



</summary><category term="chris-messina"/><category term="cookies"/><category term="csrf"/><category term="greasekit"/><category term="greasemonkey"/><category term="javascript"/><category term="safari"/><category term="security"/><category term="sitespecificbrowsers"/><category term="webkit"/><category term="xss"/></entry><entry><title>Anyone who recently downloaded GreaseMonkey scripts from userscripts.org should check their scripts</title><link href="https://simonwillison.net/2007/Jul/7/jyte/#atom-tag" rel="alternate"/><published>2007-07-07T22:43:39+00:00</published><updated>2007-07-07T22:43:39+00:00</updated><id>https://simonwillison.net/2007/Jul/7/jyte/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://jyte.com/cl/anyone-who-recently-downloaded-greasemonkey-scripts-from-userscripts.org-should-check-their-scripts"&gt;Anyone who recently downloaded GreaseMonkey scripts from userscripts.org should check their scripts&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I haven’t confirmed this, but this Jyte claim suggests that userscripts.org was hacked and cookie stealing code inserted in to some of the scripts. UPDATE: Not hacked; just bad scripts submitted through the regular process.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jyte"&gt;jyte&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/userscripts"&gt;userscripts&lt;/a&gt;&lt;/p&gt;



</summary><category term="greasemonkey"/><category term="jyte"/><category term="security"/><category term="userscripts"/></entry><entry><title>Greasemonkey 0.6.5 - 2.0 support and localization</title><link href="https://simonwillison.net/2006/Jul/28/greasemonkey/#atom-tag" rel="alternate"/><published>2006-07-28T08:47:07+00:00</published><updated>2006-07-28T08:47:07+00:00</updated><id>https://simonwillison.net/2006/Jul/28/greasemonkey/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://greaseblog.blogspot.com/2006/07/greasemonkey-065-20-support-and.html"&gt;Greasemonkey 0.6.5 - 2.0 support and localization&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
First release in nearly 8 months. Great to see it’s still ticking over.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/l10n"&gt;l10n&lt;/a&gt;&lt;/p&gt;



</summary><category term="greasemonkey"/><category term="l10n"/></entry><entry><title>Campfire Bot</title><link href="https://simonwillison.net/2006/Feb/26/campfire/#atom-tag" rel="alternate"/><published>2006-02-26T06:18:51+00:00</published><updated>2006-02-26T06:18:51+00:00</updated><id>https://simonwillison.net/2006/Feb/26/campfire/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.bigbold.com/snippets/posts/show/1517"&gt;Campfire Bot&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Campfire + Greasemonkey = Bot. How long until there’s a Google Talk one of these?


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;&lt;/p&gt;



</summary><category term="greasemonkey"/></entry><entry><title>Canvas demos</title><link href="https://simonwillison.net/2005/Oct/5/canvas/#atom-tag" rel="alternate"/><published>2005-10-05T16:43:36+00:00</published><updated>2005-10-05T16:43:36+00:00</updated><id>https://simonwillison.net/2005/Oct/5/canvas/#atom-tag</id><summary type="html">
    &lt;p&gt;Jesse Andrews (of &lt;a href="http://bookburro.org/"&gt;Book Burro&lt;/a&gt; and &lt;a href="http://userscripts.org/"&gt;userscripts.org&lt;/a&gt; fame) has built some &lt;a href="http://overstimulate.com/projects/canvas/"&gt;awesome canvas demos&lt;/a&gt; for users of Safari or Firefox 1.5. He has a bar chart and some animated rectangles, but the real gem is the live chart which polls a server using XMLHttpRequest and updates a line graph with live data. He also has some fun mathematical experiments: a cellular automata generator and a neat exploration of &lt;a href="http://en.wikipedia.org/wiki/Lindenmayer_System"&gt;Lindenmayer systems&lt;/a&gt; (both &lt;a href="http://overstimulate.com/projects/canvas/lindenmayer.html" title="Canvas Lindenmayer Systems"&gt;static&lt;/a&gt; and &lt;a href="Interactive Canvas Lindenmayer Systems"&gt;interactive&lt;/a&gt;). Read more &lt;a href="http://overstimulate.com/articles/2005/10/04/canvas-examples" title="overstimulate: Canvas examples"&gt;on his blog&lt;/a&gt;.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/firefox"&gt;firefox&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jesse-andrews"&gt;jesse-andrews&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="canvas"/><category term="firefox"/><category term="greasemonkey"/><category term="jesse-andrews"/></entry><entry><title>More fun with the monkey</title><link href="https://simonwillison.net/2005/Sep/17/monkeyfun/#atom-tag" rel="alternate"/><published>2005-09-17T19:44:56+00:00</published><updated>2005-09-17T19:44:56+00:00</updated><id>https://simonwillison.net/2005/Sep/17/monkeyfun/#atom-tag</id><summary type="html">
    &lt;p id="p-0"&gt;Cory Doctorow points to &lt;a href="http://memory.loc.gov/ammem/fsachtml/fsacsubjindex1.html"&gt;America from the Great Depression to World War II: Color Photographs from the FSA-OWI, 1939-1945&lt;/a&gt;, with the &lt;a href="http://www.boingboing.net/2005/09/16/color_photos_of_the_.html" title="Color photos of the US 1939-1945"&gt;following observation&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite="http://www.boingboing.net/2005/09/16/color_photos_of_the_.html"&gt;&lt;p id="p-1"&gt;Unfortunately, the organizational back-end for this is so primitive (especially in comparison with modern image-sharing and organizing sites like &lt;a href="http://flickr.com/"&gt;Flickr&lt;/a&gt;) that it, too, seems to hail from 1939-1945, making the site a real pain to navigate and use.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p id="p-2"&gt;Thanks to &lt;a href="http://greasemonkey.mozdev.org/"&gt;Greasemonkey&lt;/a&gt;, great content spoiled by poor navigation is a solvable problem.&lt;/p&gt;

&lt;p id="p-3"&gt;&lt;a href="http://simon.incutio.com/code/greasemonkey/americanmemoryfixer.user.js"&gt;americanmemoryfixer.user.js&lt;/a&gt; includes the following improvements:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Changes the colour scheme to black-on-white, and the typeface to Verdana.&lt;/li&gt;
  &lt;li&gt;Removes all table borders.&lt;/li&gt;
  &lt;li&gt;Adds headings to some pages, and fixes various title tags.&lt;/li&gt;
  &lt;li&gt;Sets the default gallery view to be a set of thumbnails, rather than a list of names.&lt;/li&gt;
  &lt;li&gt;Displays a large image (as opposed to a thumbnail) when you view a photograph.&lt;/li&gt;
&lt;/ul&gt;

&lt;p id="p-4"&gt;The scariest hack in the script is the way in which subject page titles are passed around. In the current site, if you visit a category page (such as &lt;a href="http://memory.loc.gov/cgi-bin/query/r?ammem/fsaall:@FILREQ(@field(SUBJ+@band(Sharecroppers+))+@FIELD(COLLID+fsac))"&gt;Sharecroppers&lt;/a&gt;) the title of the category is not displayed on the page - even though it has been passed as a parameter in the URL. If you click a link (say to the Galley thumbnail page) the information in the URL is lost as well.&lt;/p&gt;

&lt;p id="p-5"&gt;My solution was to extract the subject from the URL on that first page, then rewrite the other links to include an additional "&amp;amp;subject=Sharecroppers" parameter. This new parameter is ignored by the CGI scripts that power the site, but my Greasemonkey script watches out for it on subsequent pages and uses it to  display a title (and further propagate it to other links on the page). It's not a very robust solution, but it's good enough.&lt;/p&gt;

&lt;p id="p-6"&gt;There's plenty of scope for further improvement - if you want to use my script as a starting point, please feel free.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/cory-doctorow"&gt;cory-doctorow&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="cory-doctorow"/><category term="greasemonkey"/></entry><entry><title>scribbly</title><link href="https://simonwillison.net/2005/Sep/13/scribbly/#atom-tag" rel="alternate"/><published>2005-09-13T01:03:44+00:00</published><updated>2005-09-13T01:03:44+00:00</updated><id>https://simonwillison.net/2005/Sep/13/scribbly/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://ponderer.org/scribbly"&gt;scribbly&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Greasemonkey + canvas.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;&lt;/p&gt;



</summary><category term="greasemonkey"/></entry><entry><title>Firefox 1.5-compatible Greasemonkey beta now available</title><link href="https://simonwillison.net/2005/Sep/13/firefox/#atom-tag" rel="alternate"/><published>2005-09-13T00:48:38+00:00</published><updated>2005-09-13T00:48:38+00:00</updated><id>https://simonwillison.net/2005/Sep/13/firefox/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://greaseblog.blogspot.com/2005/09/firefox-15-compatible-greasemonkey.html"&gt;Firefox 1.5-compatible Greasemonkey beta now available&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I’d been waiting for this.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/firefox"&gt;firefox&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;&lt;/p&gt;



</summary><category term="firefox"/><category term="greasemonkey"/></entry><entry><title>[Greasemonkey] Monkey Do</title><link href="https://simonwillison.net/2005/Aug/18/greasemonkey/#atom-tag" rel="alternate"/><published>2005-08-18T17:39:09+00:00</published><updated>2005-08-18T17:39:09+00:00</updated><id>https://simonwillison.net/2005/Aug/18/greasemonkey/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.mozdev.org/pipermail/greasemonkey/2005-August/005030.html"&gt;[Greasemonkey] Monkey Do&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
User script that automatically posts interesting things to del.icio.us.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/delicious"&gt;delicious&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;&lt;/p&gt;



</summary><category term="delicious"/><category term="greasemonkey"/></entry><entry><title>Chapter 4. Common Patterns [Dive Into Greasemonkey]</title><link href="https://simonwillison.net/2005/Aug/12/chapter/#atom-tag" rel="alternate"/><published>2005-08-12T17:56:08+00:00</published><updated>2005-08-12T17:56:08+00:00</updated><id>https://simonwillison.net/2005/Aug/12/chapter/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://diveintogreasemonkey.org/patterns/index.html"&gt;Chapter 4. Common Patterns [Dive Into Greasemonkey]&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Greasemonkey patterns.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;&lt;/p&gt;



</summary><category term="greasemonkey"/></entry><entry><title>MagicLine</title><link href="https://simonwillison.net/2005/Aug/4/magicline/#atom-tag" rel="alternate"/><published>2005-08-04T16:32:40+00:00</published><updated>2005-08-04T16:32:40+00:00</updated><id>https://simonwillison.net/2005/Aug/4/magicline/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.mozdev.org/pipermail/greasemonkey/2005-August/004738.html"&gt;MagicLine&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Greasemonkey + microformats killer app. You just HAVE to check this out.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/microformats"&gt;microformats&lt;/a&gt;&lt;/p&gt;



</summary><category term="greasemonkey"/><category term="microformats"/></entry><entry><title>Jeff Barr on Greasemonkey</title><link href="https://simonwillison.net/2005/Aug/2/jeff/#atom-tag" rel="alternate"/><published>2005-08-02T11:55:45+00:00</published><updated>2005-08-02T11:55:45+00:00</updated><id>https://simonwillison.net/2005/Aug/2/jeff/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.syndic8.com/~jeff/blog/index.php?p=271"&gt;Jeff Barr on Greasemonkey&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Greasemonkey for "Enterprise Application Integration".&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Despite the odd name, Greasemonkey embodies a very cool and somewhat unique concept, something that I am starting to think of as low-budget, client-side application integration. In the late 90’s, “EAI” or Enterprise Application Integration, was all the rage. Companies that had the need to make disparate applications work together would spend tens of thousands of dollars on complex, fragile software to make it happen. Sometimes it worked, and sometimes it didn’t. When it didn’t, they would call in armies of even more expensive consultants.&lt;/p&gt;
&lt;p&gt;Now, I’ll be the first to say that Greasemonkey in its present form isn’t quite ready to replace expensive, commercial EAI software. However, I do believe that it belongs in the enterprise developer’s tookit of possible solutions, and I also believe that Greasemonkey will gain features, power, and respect over the coming months and that now is the time to learn more about it.&lt;/p&gt;
&lt;/blockquote&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jeff-barr"&gt;jeff-barr&lt;/a&gt;&lt;/p&gt;



</summary><category term="greasemonkey"/><category term="jeff-barr"/></entry><entry><title>[Greasemonkey] A whole other kind of monkey</title><link href="https://simonwillison.net/2005/Jul/20/greasemonkey/#atom-tag" rel="alternate"/><published>2005-07-20T19:56:40+00:00</published><updated>2005-07-20T19:56:40+00:00</updated><id>https://simonwillison.net/2005/Jul/20/greasemonkey/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.mozdev.org/pipermail/greasemonkey/2005-July/004221.html"&gt;[Greasemonkey] A whole other kind of monkey&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Help Aaron test the new, hopefully secure, Greasemonkey.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;&lt;/p&gt;



</summary><category term="greasemonkey"/></entry><entry><title>Understanding the Greasemonkey vulnerability</title><link href="https://simonwillison.net/2005/Jul/20/vulnerability/#atom-tag" rel="alternate"/><published>2005-07-20T03:09:19+00:00</published><updated>2005-07-20T03:09:19+00:00</updated><id>https://simonwillison.net/2005/Jul/20/vulnerability/#atom-tag</id><summary type="html">
    &lt;p id="p-0"&gt;If you have any version of Greasemonkey installed prior to 0.3.5, which was released a few hours ago, or if you are running any of the 0.4 alphas, you need to go and upgrade &lt;a href="http://greasemonkey.mozdev.org/"&gt;right now&lt;/a&gt;. All versions of Greasemonkey aside from 0.3.5 contain a &lt;a href="http://mozdev.org/pipermail/greasemonkey/2005-July/004022.html" title="Mark Pilgrim&amp;apos;s announcement of the vulnerability"&gt;nasty security hole&lt;/a&gt;, which could enable malicious web sites to read any file from your hard drive without you knowing.&lt;/p&gt;

&lt;p id="p-1"&gt;Unfortunately, 0.3.5 disables all of the &lt;a href="http://diveintogreasemonkey.org/api/"&gt;GM_ API functions&lt;/a&gt;, without which many of the more interesting user scripts out there simple won't work. This is a temporary measure - the &lt;code&gt;GM_&lt;/code&gt; functions should return in a later release, once the security problem with them has been resolved.&lt;/p&gt;

&lt;p id="p-2"&gt;I'm going to explain how the vulnerability works, because it illustrates a number of interesting concepts in both web application security and JavaScript.&lt;/p&gt;

&lt;h4&gt;Same-origin policy&lt;/h4&gt;

&lt;p id="p-3"&gt;JavaScript has always enforced a &lt;em&gt;same-origin policy&lt;/em&gt; for scripts loaded over the internet. This originally applied to scripting between frames (and iframes): a script loaded from a certain domain is only allowed to access the DOM of other pages loaded from that same domain. The same restriction has been extended to &lt;code&gt;XMLHttpRequest&lt;/code&gt; - you are only allowed to make an &lt;code&gt;XMLHttpRequest&lt;/code&gt; call back to the domain from which the script was originally loaded.&lt;/p&gt;

&lt;p id="p-4"&gt;This policy exists to prevent cross-domain attacks. Say for example you work for a company with an intranet hidden behind the firewall, full of interesting proprietary information. Without the same-origin policy, malicious sites that you visit on the public internet would be able to read information from your intranet, using your browser as the middle-man.&lt;/p&gt;

&lt;h4&gt;GM_xmlhttpRequest&lt;/h4&gt;

&lt;p id="p-5"&gt;The &lt;code&gt;GM_xmlhttpRequest&lt;/code&gt; API function does not have this restriction - it can load data from any domain. This enables a whole host of interesting user scripts - the most famous of which is probably &lt;a href="http://bookburro.org/"&gt;Book Burro&lt;/a&gt;, which shows comparison prices from different online stores for the item you are currently looking at on Amazon, Barnes and Noble and more.&lt;/p&gt;

&lt;p id="p-6"&gt;Malicious user scripts could use this feature to steal information from your private intranet, but malicious user scripts could also do all manner of other nasty things - stealing your Hotmail password for example. This is why you should never install a user script from an untrusted source without first reviewing the code.&lt;/p&gt;

&lt;h4&gt;Restricting API functions to user scripts only&lt;/h4&gt;

&lt;p id="p-7"&gt;To keep things safe then, it is essential that the &lt;code&gt;GM_&lt;/code&gt; family of API functions can only ever be used by user scripts, not by code running on pages that you have visited. By installing a user script you have declared it trustworthy - but visiting a web page does not carry that contract.&lt;/p&gt;

&lt;p id="p-8"&gt;The way the flawed versions of Greasemonkey do that now is simple: the &lt;code&gt;GM_&lt;/code&gt; functions are added to the JavaScript global object (which is the window object), the user scripts for the page are "injected" using dynamically created &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; elements, they run, then the &lt;code&gt;GM_&lt;/code&gt; functions are removed from the global object to prevent scripts on the page from accessing them. This works because Greasemonkey injection and execution happens just before the onload event is fired - which is when most well behaved scripts kick in.&lt;/p&gt;

&lt;h4&gt;Object.watch()&lt;/h4&gt;

&lt;p id="p-9"&gt;Here's the clever part: JavaScript 1.5 defines a method of the Object class (which is inherited by all other JavaScript objects) called &lt;a href="http://developer-test.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Object:watch"&gt;watch&lt;/a&gt;. Watch is extremely powerful: it lets you register some code to be executed when a property on some other object is assigned. This is the key to the Greasemonkey vulnerability - by watching the window object for the point at which Greasemonkey adds the API functions, a malicious script can use those functions at the moment they are attached.&lt;/p&gt;

&lt;h4&gt;The file:// protocol&lt;/h4&gt;

&lt;p id="p-10"&gt;Here's the final piece of the puzzle: the &lt;code&gt;file://&lt;/code&gt; protocol in Firefox allows you to view files and directory listings in your browser. Unfortunately, it also allows the &lt;code&gt;GM_xmlhttpRequest&lt;/code&gt; function to do the same. It's not at all hard for a malicious script to use the function to load in files at a known location - or even load in directory listings (as HTML), parse them and use them to find all kinds of things scattered around your hard drive.&lt;/p&gt;

&lt;h4&gt;Solving the problem&lt;/h4&gt;

&lt;p id="p-11"&gt;The principle problem then is the requirement for "safe" Greasemonkey API functions - that is, functions that can be used by the user scripts but &lt;em&gt;not&lt;/em&gt; by code running on a website. Aaron is looking in to this right now - it looks like the solution will require a minor change to be made to many existing scripts, but the trade-off in terms of security is more than worth it. The &lt;code&gt;GM_xmlhttpRequest&lt;/code&gt; function will also be modified to disallow &lt;code&gt;file://&lt;/code&gt; URLs.&lt;/p&gt;

&lt;p id="p-12"&gt;Until then, 0.3.5 is the only safe version of Greasemonkey.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/xmlhttprequest"&gt;xmlhttprequest&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="greasemonkey"/><category term="javascript"/><category term="security"/><category term="xmlhttprequest"/></entry><entry><title>LUG Radio Live</title><link href="https://simonwillison.net/2005/Jun/26/lugradiolive/#atom-tag" rel="alternate"/><published>2005-06-26T18:33:17+00:00</published><updated>2005-06-26T18:33:17+00:00</updated><id>https://simonwillison.net/2005/Jun/26/lugradiolive/#atom-tag</id><summary type="html">
    &lt;p&gt;I've been &lt;em&gt;very&lt;/em&gt; busy for the last three days. My last two exams (HCI and Marketing) were on Thursday evening and Friday morning respectively, followed by a celebratory barbecue. I was up at 7am on Saturday to get up to Wolverhampton for &lt;a href="http://www.lugradio.org/live/2005/"&gt;LUG Radio Live&lt;/a&gt;, then back to Bath again by 5.30pm for our graduation summer ball. Finally, I'm heading off to Denmark in the early hours of Monday morning for a week and a bit of camping and &lt;a href="http://en.wikipedia.org/wiki/Roskilde_Festival"&gt;Roskilde&lt;/a&gt; Let's hope it's a bit drier than &lt;a href="http://www.flickr.com/photos/paulhammond/21499496/" title="Sharks!"&gt;Glastonbury was&lt;/a&gt;.&lt;/p&gt;

&lt;p id="p-0"&gt;LUG Radio Live was a huge success. I have no idea how many people showed up, but it was at least several hundred. I did a lightning talk on Greasemonkey (&lt;a href="https://web.archive.org/web/20051124131024if_/http://simon.incutio.com/slides/2005/lugradio/" title="Hacking the web with Greasemonkey"&gt;slides here&lt;/a&gt;) which seemed to go pretty well, and ended in a lively Q&amp;amp;A session. I've posted &lt;a href="http://www.flickr.com/photos/simon/sets/503809/" title="Photo Set: LUG Radio Live 2005"&gt;some of my photos&lt;/a&gt; from the event up on Flickr.&lt;/p&gt;

&lt;p id="p-1"&gt;Mark Shuttleworth seamlessly combined a talk on Ubuntu, the importance of open source, collaborative development tools and what it's like to go in to space. He's a great speaker, and I thoroughly recommend seeing him talk if you ever get a chance. He also mentioned that he would be interesting in sponsoring a bounty towards the development of an open-source SubEthaEdit clone.&lt;/p&gt;

&lt;p id="p-2"&gt;The LUG Radio team interviewed Ian Bell, the author of the original Elite. The most interesting revelation was that fitting the compiled Elite game in to 32K was actually easier than getting the uncompiled source code small enough to fit on the hosting architecture (they had to strip out all of the comments).&lt;/p&gt;

&lt;p id="p-3"&gt;I met a bunch of interesting people and had a great time, even though I had to leave early to get back in time for the ball. Congratulations to all involved, and I look forward to going again next year.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/conferences"&gt;conferences&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/lugradio"&gt;lugradio&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/lugradiolive"&gt;lugradiolive&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/speaking"&gt;speaking&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/my-talks"&gt;my-talks&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="conferences"/><category term="greasemonkey"/><category term="lugradio"/><category term="lugradiolive"/><category term="speaking"/><category term="my-talks"/></entry><entry><title>Magic Microformat Forms Redux, Now with GreaseMonkey!</title><link href="https://simonwillison.net/2005/Jun/9/magic/#atom-tag" rel="alternate"/><published>2005-06-09T23:18:00+00:00</published><updated>2005-06-09T23:18:00+00:00</updated><id>https://simonwillison.net/2005/Jun/9/magic/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.decafbad.com/blog/2005/06/08/greasemonkey_magic"&gt;Magic Microformat Forms Redux, Now with GreaseMonkey!&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Les Orchard gets in to Greasemonkey—with accompanying screencast.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/les-orchard"&gt;les-orchard&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/microformats"&gt;microformats&lt;/a&gt;&lt;/p&gt;



</summary><category term="greasemonkey"/><category term="les-orchard"/><category term="microformats"/></entry><entry><title>Workplace absuridities as phone support for a DSL ISP</title><link href="https://simonwillison.net/2005/Jun/9/workplace/#atom-tag" rel="alternate"/><published>2005-06-09T23:01:03+00:00</published><updated>2005-06-09T23:01:03+00:00</updated><id>https://simonwillison.net/2005/Jun/9/workplace/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://slashdot.org/~NoMoreNicksLeft/journal/108539"&gt;Workplace absuridities as phone support for a DSL ISP&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Greasemonkey used to fix web application leads to misguided Firefox ban.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;&lt;/p&gt;



</summary><category term="greasemonkey"/></entry><entry><title>Tweaking Wikipedia</title><link href="https://simonwillison.net/2005/Jun/6/wikipedia/#atom-tag" rel="alternate"/><published>2005-06-06T18:13:44+00:00</published><updated>2005-06-06T18:13:44+00:00</updated><id>https://simonwillison.net/2005/Jun/6/wikipedia/#atom-tag</id><summary type="html">
    &lt;p id="p-0"&gt;Does anyone know why &lt;a href="http://en.wikipedia.org/"&gt;Wikipedia&lt;/a&gt; displays a redirected page at the same &lt;acronym title="Universal Republic of Love"&gt;URL&lt;/acronym&gt; rather than using a proper &lt;acronym title="HyperText Transfer Protocol"&gt;HTTP&lt;/acronym&gt; redirect? Case in point: &lt;a href="http://en.wikipedia.org/wiki/Topics_in_human-computer_interaction"&gt;Topics in human-computer interaction&lt;/a&gt; actually displays the content from &lt;a href="http://en.wikipedia.org/wiki/List_of_human-computer_interaction_topics"&gt;List of human-computer interaction topics&lt;/a&gt; (that's my next exam topic) - the same content appears at two different &lt;acronym title="Universal Republic of Love"&gt;URL&lt;/acronym&gt;s. Yuck. Here's a Greasemonkey script to fix it: &lt;a href="http://simon.incutio.com/code/greasemonkey/wikipedia-redirect.user.js"&gt;wikipedia-redirect.user.js&lt;/a&gt;.&lt;/p&gt;

&lt;p id="p-1"&gt;While I'm at it, Wikipedia's search function is painfully slow. Here's another user script which changes their search button to search the site using Google instead. It also swaps the positions of the "Search" and "Go" buttons, and makes "Search" the default action for the form: &lt;a href="http://simon.incutio.com/code/greasemonkey/wikipedia-googlesearch.user.js"&gt;wikipedia-googlesearch.user.js&lt;/a&gt;.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/wikipedia"&gt;wikipedia&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="greasemonkey"/><category term="wikipedia"/></entry><entry><title>Trixie: Greasemonkey for IE</title><link href="https://simonwillison.net/2005/May/31/trixie/#atom-tag" rel="alternate"/><published>2005-05-31T19:15:09+00:00</published><updated>2005-05-31T19:15:09+00:00</updated><id>https://simonwillison.net/2005/May/31/trixie/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.bhelpuri.net/Trixie/Trixie.htm"&gt;Trixie: Greasemonkey for IE&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Second attempt—but it’s still closed source.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://www.mozdev.org/pipermail/greasemonkey/2005-May/002873.html"&gt;The Greasemonkey mailing list&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/internet-explorer"&gt;internet-explorer&lt;/a&gt;&lt;/p&gt;



</summary><category term="greasemonkey"/><category term="internet-explorer"/></entry><entry><title>[Greasemonkey] a difference in vision</title><link href="https://simonwillison.net/2005/May/29/greasemonkey/#atom-tag" rel="alternate"/><published>2005-05-29T22:49:20+00:00</published><updated>2005-05-29T22:49:20+00:00</updated><id>https://simonwillison.net/2005/May/29/greasemonkey/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.mozdev.org/pipermail/greasemonkey/2005-May/002677.html"&gt;[Greasemonkey] a difference in vision&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Check out the last paragraph. I got a kick out of it.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;&lt;/p&gt;



</summary><category term="greasemonkey"/></entry><entry><title>Greasemonkey: Yet Another Reason to Use Firefox</title><link href="https://simonwillison.net/2005/May/27/greasemonkey/#atom-tag" rel="alternate"/><published>2005-05-27T21:37:40+00:00</published><updated>2005-05-27T21:37:40+00:00</updated><id>https://simonwillison.net/2005/May/27/greasemonkey/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blogs.pcworld.com/techlog/archives/000693.html"&gt;Greasemonkey: Yet Another Reason to Use Firefox&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Great writeup of Greasemonkey on the PC World Techlog(!)


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/firefox"&gt;firefox&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;&lt;/p&gt;



</summary><category term="firefox"/><category term="greasemonkey"/></entry><entry><title>Tweaking WordPress With Greasemonkey</title><link href="https://simonwillison.net/2005/May/25/tweaking/#atom-tag" rel="alternate"/><published>2005-05-25T13:11:55+00:00</published><updated>2005-05-25T13:11:55+00:00</updated><id>https://simonwillison.net/2005/May/25/tweaking/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.benjaminadam.com/archives/2005/05/24/tweaking-wordpress-greasemonkey"&gt;Tweaking WordPress With Greasemonkey&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
More application interface enhancements.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://photomatt.net/2005/05/24/wordpress-and-greasemonkey/"&gt;Photo Matt&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/wordpress"&gt;wordpress&lt;/a&gt;&lt;/p&gt;



</summary><category term="greasemonkey"/><category term="wordpress"/></entry><entry><title>Fixing web applications with Greasemonkey</title><link href="https://simonwillison.net/2005/May/24/fixing/#atom-tag" rel="alternate"/><published>2005-05-24T01:59:40+00:00</published><updated>2005-05-24T01:59:40+00:00</updated><id>https://simonwillison.net/2005/May/24/fixing/#atom-tag</id><summary type="html">
    &lt;p&gt;In &lt;a href="/2005/Apr/14/fud/"&gt;Greasemonkey FUD&lt;/a&gt;, I highlighted the importance of Greasemonkey as a tool for fixing interface problems in "enterprise" web applications. DJ Adams has &lt;a href="https://www.sdn.sap.com/sdn/weblogs.sdn?blog=/pub/wlg/1669"&gt;done exactly that&lt;/a&gt; for OSS Notes, part of the SAP service portal. His &lt;a href="http://www.pipetree.com/~dj/2005/05/OssNoteFix/ossnotefix.user.js" title="ossnotefix.user.js"&gt;user script&lt;/a&gt; ditches the frames in the interface, makes the page title more useful and adds hyperlinks to other note references on the page - significantly improving the user experience in less than 40 lines of code. The improvements are clearly explained in the accompanying &lt;a href="http://www.pipetree.com/~dj/2005/05/OssNoteFix/screencast.html"&gt;screencast&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Spotted &lt;a href="http://www.mozdev.org/pipermail/greasemonkey/2005-May/002393.html" title="[Greasemonkey] GM script for SAP"&gt;via Jeremy&lt;/a&gt; on the Greasemonkey mailing list.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="greasemonkey"/></entry><entry><title>Wired News: Firefox Users Monkey With the Web</title><link href="https://simonwillison.net/2005/May/17/wired/#atom-tag" rel="alternate"/><published>2005-05-17T12:27:15+00:00</published><updated>2005-05-17T12:27:15+00:00</updated><id>https://simonwillison.net/2005/May/17/wired/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.wired.com/2005/05/firefox-users-monkey-with-the-web/"&gt;Wired News: Firefox Users Monkey With the Web&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Greasemonkey on Wired—and I get quoted!


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/firefox"&gt;firefox&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/press-quotes"&gt;press-quotes&lt;/a&gt;&lt;/p&gt;



</summary><category term="firefox"/><category term="greasemonkey"/><category term="press-quotes"/></entry></feed>