play on tumblr
var click = function(n) { var e = document.createEvent('MouseEvents'); e.initMouseEvent("click",true,true,unsafeWindow,1,10,50,10,50,0,0,0,0,1,n); n.dispatchEvent(e);
マウスクリックをやっつけてるところはこの辺りか。
event.initMouseEvent(type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget);
event.initMouseEvent - MDC
unsafeWindow なのは、onclick なとこをクリックするためなのかな。あとscreenX, screenY, clientX, clientYってなんだろね。
// ==UserScript== // @name play on tumblr // @namespace tag:mattn.jp@gmail.com,2008-04-03:/coderepos.org // @description play current image or vide on tumblr dashboard with 'ENTER' key. if won't work, pray on tumblr! // @include http://www.tumblr.com/dashboard* // @include http://www.tumblr.com/show/* // ==/UserScript== if (typeof window.Minibuffer != 'undefined') with (window.Minibuffer) { var click = function(n) { var e = document.createEvent('MouseEvents'); e.initMouseEvent("click",true,true,unsafeWindow,1,10,50,10,50,0,0,0,0,1,n); n.dispatchEvent(e); }; addShortcutkey({ key: "RET", // key: "h", description: 'tumblr.play', command: function() { try { execute( 'tumblr.play', execute('current-node')); } catch (e) { } }}); addShortcutkey({ key: "h", // key: "i", description: 'tumblr.reblogcount', command: function() { try { execute( 'tumblr.reblogcount', execute('current-node')); } catch (e) { } }}); addCommand({ name: 'tumblr.play', command: function(stdin) { try { if (!stdin.length) stdin = execute('current-node'); var img = $X('./div[starts-with(@id, "highres_photo")]', stdin[0]); for (var n = 0; n < img.length; n++) { if (img[n].style.display != 'none') { click($X('./a', img[n])[0]); return stdin; } else{ click($X('./preceding-sibling::a[1]', img[n])[0]); return stdin; } } var mov = $X('.//div[contains(@id,"watch_") and .//a]', stdin[0]); for (var n = 0; n < mov.length; n++) { if (mov[n].style.display != 'none') { click($X('.//a', mov[n])[0]); return stdin; } } } catch (e) { } return stdin; }}); addCommand({ name: 'tumblr.reblogcount', command: function(stdin) { try { if (!stdin.length) stdin = execute('current-node'); var count = $X('.//a[contains(concat(" ",@class," "), " reblog_count ")]', stdin[0]); for (var n = 0; n < count.length; n++) { click(count[n]); return stdin; } } catch (e) { } return stdin; }}); }http://coderepos.org/share/browser/lang/javascript/userscripts/playontumblr.user.js?