How to Automatically Link to Printer-Friendly Versions with User Scripts

Automatically Link to Printer-Friendly Versions

Get the content without the cruft by changing selected article links to "printer-friendly" versions.

Most online news sites offer printer-friendly versions of their articles. Such pages usually contain the entire article text in one page, instead of forcing you to click through to read multiple pages. They also leave out the site's global navigation bar. They might also have fewer ads, or no ads at all.

Well, that all sounds appealing to me; why isn't that the default? This hack makes it the default, by changing links to selected news sites to point to the printer-friendly article instead.

The Code

This user script runs on all pages. It uses regular expressions to find specific patterns in link URLs and then performs site-specific alterations to change the link to point to the associated printer-friendly page instead. Of course, it works only on links to the sites it knows about, but it can easily be extended with knowledge of how other sites associate normal article pages and printer-friendly pages.

Save the following user script as bstopthepresses.user.js:

 // ==UserScript==
 // @name    Stop The Presses!
 // @namespace   http://diveintomark.org/projects/greasemonkey/
 // @description   make links point to printer-friendly versions
 // @include       *
 // ==/UserScript==
 var urlPage = window.location.href;
 for (var i = document.links.length - 1; i >= 0; i--) {
     var elmLink = document.links[i];
     var urlHref = elmLink.href;
  // Yahoo News
  if ((urlHref.match(/\/\/(story\.)?news\.yahoo\.com\//i)) &&
  ((urlHref.match(/sid=/i)) || (urlHref.match(/tmpl=story/i))) &&
   (!urlHref.match(/printer=1/i))) {
   if (urlHref.match(/\?/i)) {
    urlHref += '&printer=1';
   } else {
       urlHref += '?printer=1';
   }
  }
  // NYTimes
  if ((urlHref.match(/nytimes\.com\/2/i)) &&
      (!urlHref.match(/pagewanted=/i))) {
   if (urlHref.match(/\?/i)) {
    urlHref += '&pagewanted=print';
   } else {
    urlHref += '?pagewanted=print';
   }
  }
  // CNET
  if (((urlHref.match(/com\.com\//i)) ||
    (urlHref.match(/cnet\.com\//i)) ||
    (urlPage.match(/com\.com\//i)) ||
    (urlPage.match(/cnet\.com\//i))) &&
   (urlHref != elmLink. textContent)) {
   urlHref = urlHref.replace(/2100-/g, '2102-');
   urlHref = urlHref.replace(/2008-/g, '2102-');
  }
  // Washington Post
  if ((urlHref.match(/washingtonpost\.com\/wp\-dyn\/content\/article/i))
&&
     (!urlHref.match(/_pf\./i))) {
      urlHref = urlHref.replace(/.html/g, '_pf.html');
  }
  if (urlHref != elmLink.href) {
   elmLink.href = urlHref;
   elmLink.addEventListener('click', function(event) {
       window.top.location.href = urlHref;
    event.stopPropagation();
    event.preventDefault();
    return false;
   }, true);
  }
 }

Running the Hack

After installing the user script (Tools Install This User Script), go to http://news.com.com. (Yes, there are really two .coms in that URL. Don't ask.) Click any article link to read that article. Instead of the usual News.com article page, you will immediately go to the printer-friendly version, as shown in Figure 9-10.

Figure 9-10. News.com printer-friendly page

As printer-friendly pages have become more popular, news sites have begun adding advertisements and other clutter to them, but they are still an improvement over the original article pages.