Creating Tampermonkey User Script in Chrome

Scenario
In some cases, we want to change our frequently-visited website a bit: such as add some shortcut key: click >(right arrow) to go to next page, click <(left arrow) to go previous page in current web site.

We can create chrome extension, but it's overkill in this case. 

Tampermonkey
Chrome partially supports Greasemonkey, but doesn't support @require, @resource, unsafeWindow, GM_registerMenuCommand, GM_setValue, or GM_getValue.

Luckily, Tampermonkey fixes this issue: it is fully compatible to Greasemonkey, including GM_registerMenuCommand, GM_xmlhttpRequest with cross domain support and access to the unsafeWindow object. 

We can install tampermonkey from webstore. Then use its dashboard to create(add) new user scripts locally.

We can create one simple Greasemonkey user script to do it, or install exsiting user scripts from 
https://greasyfork.org/
http://userscripts-mirror.org/
https://openuserjs.org/

Examples
EDX helper
When watch open source courses in EDX, I would like to add the following shortcut keys:
>(right arrow): go to next page, <(left arrow) to go to previous page, t to play/pause the video, m to toggle full screen.
Also I want to auto play the video.
// ==UserScript==
// @name       edx helper
// @namespace  lifelongprogrammer.blogspot.com
// @require     https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js
// @version    1.0
// @description  some keybindings for edx: next, previous, play/pause
// @match      https://courses.edx.org/courses/*
// @copyright  2014+, Jeffery Yuan original author: Andrea Bisognin
// ==/UserScript==

this.$ = this.jQuery = jQuery.noConflict(true);
$(document).ready(function () {
 // auto play
 console.log("edx helper");
 setTimeout(function () {
  console.log("edx helper auto player");
  unsafeWindow.$("section.video-controls a[class='video_control play']").click();
 }, 2000);
 jQuery(document).keydown(function (e) {
  console.log("edx helper; key: " + e.keyCode);
  if (e.keyCode == 39) { //->
   unsafeWindow.$("div.sequence-nav > button.sequence-nav-button.button-next").click();
  }
  if (e.keyCode == 37) { // <-
   unsafeWindow.$("div.sequence-nav > button.sequence-nav-button.button-previous").click();
  }
  if (e.keyCode == 84 || e.keyCode == 116) { //t
   unsafeWindow.$("section.video-controls > div:nth-child(2) > ul > li:nth-child(1) > a").click();
  }
  if (e.keyCode == 67 || e.keyCode == 99) { //c
   unsafeWindow.$("div.lang.menu-container > a").click();
  }
  if (e.keyCode == 77 || e.keyCode == 109) { //m
   unsafeWindow.$("a.add-fullscreen").click();
  }

 });
});


Safaribooksonline Helper
Similarly, when watch videos on Safaribooksonline, I want to add >(right arrow): go to next page, <(left arrow) to go to previous page, f to open in full mode where we can still use left, right arrow keys.
// ==UserScript==
// @name       safaribooksonline helper
// @namespace  lifelongprogrammer.blogspot.com
// @require     https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js
// @version    1.0
// @description  some keybindings for safaribooksonline: next, previous
// @match      http://techbus.safaribooksonline.com/*
// @copyright  2015+, Jeffery Yuan, https://github.com/private-face/jquery.fullscreen
// ==/UserScript==

function d(b){var c,a;if(!this.length)return this;c=this[0];c.ownerDocument?a=c.ownerDocument:(a=c,c=a.documentElement);if(null==b){if(!a.cancelFullScreen&&!a.webkitCancelFullScreen&&!a.mozCancelFullScreen)return null;b=!!a.fullScreen||!!a.webkitIsFullScreen||!!a.mozFullScreen;return!b?b:a.fullScreenElement||a.webkitCurrentFullScreenElement||a.mozFullScreenElement||b}b?(b=c.requestFullScreen||c.webkitRequestFullScreen||c.mozRequestFullScreen)&&b.call(c,Element.ALLOW_KEYBOARD_INPUT):(b=a.cancelFullScreen||
a.webkitCancelFullScreen||a.mozCancelFullScreen)&&b.call(a);return this}jQuery.fn.fullScreen=d;jQuery.fn.toggleFullScreen=function(){return d.call(this,!d.call(this))};var e,f,g;e=document;e.webkitCancelFullScreen?(f="webkitfullscreenchange",g="webkitfullscreenerror"):e.mozCancelFullScreen?(f="mozfullscreenchange",g="mozfullscreenerror"):(f="fullscreenchange",g="fullscreenerror");jQuery(document).bind(f,function(){jQuery(document).trigger(new jQuery.Event("fullscreenchange"))});
jQuery(document).bind(g,function(){jQuery(document).trigger(new jQuery.Event("fullscreenerror"))});
this.$ = this.jQuery = jQuery.noConflict(true);
// https://github.com/private-face/jquery.fullscreen
$(document).ready(function () {
 // auto play
 console.log("safaribooksonline helper");
 jQuery(document).keydown(function (e) {
  console.log("safaribooksonline helper; key: " + e.keyCode);
  if (e.keyCode == 39) { //->
   unsafeWindow.$("#bcv_next").click();
   //$('#nana').fullScreen(true)   
  }
  if (e.keyCode == 37) { // <-
  console.log("i am called 26"); 
   unsafeWindow.$("#bcv_previous").click();
  }
  else if (e.keyCode == 70 || e.keyCode == 102) { //f
   $('div.brightcove_video').fullScreen(true)
  }
 });
});

Resources
Userscripts.org down for good? Here are alternatives
Post a Comment

Labels

Java (159) Lucene-Solr (112) Interview (61) All (58) J2SE (53) Algorithm (45) Soft Skills (38) Eclipse (33) Code Example (31) Linux (25) JavaScript (23) Spring (22) Windows (22) Web Development (20) Tools (19) Nutch2 (18) Bugs (17) Debug (16) Defects (14) Text Mining (14) J2EE (13) Network (13) Troubleshooting (13) PowerShell (11) Chrome (9) Design (9) How to (9) Learning code (9) Performance (9) Problem Solving (9) UIMA (9) html (9) Http Client (8) Maven (8) Security (8) bat (8) blogger (8) Big Data (7) Continuous Integration (7) Google (7) Guava (7) JSON (7) Shell (7) ANT (6) Coding Skills (6) Database (6) Lesson Learned (6) Programmer Skills (6) Scala (6) Tips (6) css (6) Algorithm Series (5) Cache (5) Dynamic Languages (5) IDE (5) System Design (5) adsense (5) xml (5) AIX (4) Code Quality (4) GAE (4) Git (4) Good Programming Practices (4) Jackson (4) Memory Usage (4) Miscs (4) OpenNLP (4) Project Managment (4) Spark (4) Testing (4) ads (4) regular-expression (4) Android (3) Apache Spark (3) Become a Better You (3) Concurrency (3) Eclipse RCP (3) English (3) Happy Hacking (3) IBM (3) J2SE Knowledge Series (3) JAX-RS (3) Jetty (3) Restful Web Service (3) Script (3) regex (3) seo (3) .Net (2) Android Studio (2) Apache (2) Apache Procrun (2) Architecture (2) Batch (2) Bit Operation (2) Build (2) Building Scalable Web Sites (2) C# (2) C/C++ (2) CSV (2) Career (2) Cassandra (2) Distributed (2) Fiddler (2) Firefox (2) Google Drive (2) Gson (2) How to Interview (2) Html Parser (2) Http (2) Image Tools (2) JQuery (2) Jersey (2) LDAP (2) Life (2) Logging (2) Python (2) Software Issues (2) Storage (2) Text Search (2) xml parser (2) AOP (1) Application Design (1) AspectJ (1) Chrome DevTools (1) Cloud (1) Codility (1) Data Mining (1) Data Structure (1) ExceptionUtils (1) Exif (1) Feature Request (1) FindBugs (1) Greasemonkey (1) HTML5 (1) Httpd (1) I18N (1) IBM Java Thread Dump Analyzer (1) JDK Source Code (1) JDK8 (1) JMX (1) Lazy Developer (1) Mac (1) Machine Learning (1) Mobile (1) My Plan for 2010 (1) Netbeans (1) Notes (1) Operating System (1) Perl (1) Problems (1) Product Architecture (1) Programming Life (1) Quality (1) Redhat (1) Redis (1) Review (1) RxJava (1) Solutions logs (1) Team Management (1) Thread Dump Analyzer (1) Visualization (1) boilerpipe (1) htm (1) ongoing (1) procrun (1) rss (1)

Popular Posts