Google and MSN GPX GPS Waypoint Extraction
background
Previously we showed how to pull GPS waypoints from MSN Yellow Pages and Google Maps results using a Firefox bookmarklet. Now this can be done with Internet Explorer as well. The original solution was inadequate because of the IE limit on the length of bookmarks.
approach
To support IE the bookmarklets must be implemented using the ‘script injection’ technique. This involves rewriting the head of the HTML page to add a reference to an external script. The external script can be as long as needed. The drawback is that the external script must be fetched before the bookmarklet can do its job. This adds a small delay, and a dependency on the site hosting the script. So for Firefox users the standalone bookmark is probably preferable.
implementation
The new bookmarklets simply contain the code necessary to inject the external script into the page. Just right-click or drag them to add to your favorites/bookmarks. To use them visit the appropriate page and select the bookmark.
Here is the new MSN bookmarklet, and the code:
javascript: (function(){ var script=document.createElement('script'); script.src='http://badsegue.org/samples/msngpxrip.js'; document.getElementsByTagName('head')[0].appendChild(script); } )()
Here is the new Google bookmarklet, and the code:
javascript: (function(){ var script=document.createElement('script'); script.src='http://badsegue.org/samples/googgpxrip.js'; document.getElementsByTagName('head')[0].appendChild(script); } )()
The code of the actual extractor has changed a little bit. The Google extractor has to account for DOM differences to get to the data. Notice that the function is invoked at the end of the script, and not in the bookmarklet. This ensures that the function is defined by the time it is called.
function googrip(){ var t; if (document.vp && (t=document.vp.document.scripts[0].text)) {} else if (document.getElementById('vp') && (t=document.getElementById('vp'). contentDocument.getElementsByTagName('SCRIPT').item(0).text)) {} else { alert ("Nothing found here. Are you at maps.google.com? You are at " + document.location); return(0); } var pts=t.match(//g); if (pts) { ... extraction code removed. see previous articles... } else { alert ("Nothing found here.") } } googrip();
caveats
These bookmarklets may or may not work with Firefox. It does work for me when I use Firefox from home, but not at work. Theoretically these particular scripts shouldn’t work, because they attempt to open a new browser window. According to the Mozilla documentation, scripts or pages loaded from one domain can’t manipulate pages loaded from another domain. So if you encounter problems using these scripts, just use the ones shown in the earlier articles.