Flashの上でマウスジェスチャできるようにするGreasemonkeyスクリプト


// ==UserScript==
// @name Enable Mouse Gestures on Flash and Silverlight
// @namespace http://d.hatena.ne.jp/kiyo_hoge/
// @include http://*
// ==/UserScript==

window.addEventListener('load', function() {
setTimeout(function() {
var flashElm = document.evaluate('//*[(self::embed or self::object) and (@type="application/x-shockwave-flash" or @type="application/x-silverlight-2")]', document, null, 7, null);

var setStyle = function(elm, styles) {
for (s in styles) {
elm.style[s] = styles[s];
}
}

var coverDiv = document.createElement('div');

setStyle(coverDiv, {
backgroundColor: 'transparent',
borderStyle: 'none',
margin: 0,
padding: 0,
position: 'absolute'
});

var removeCover = function(e) {
e.target.parentNode.removeChild(e.target);
}

var coverElm = function(elm) {
var pos = elm.getBoundingClientRect();
var thisCoverDiv = coverDiv.cloneNode(false);
setStyle(thisCoverDiv, {
height: elm.offsetHeight + 'px',
width: elm.offsetWidth + 'px',
top: (pos.top + window.scrollY) + 'px',
left: (pos.left + window.scrollX) + 'px',
zIndex: 65536
});
thisCoverDiv.addEventListener('click', removeCover, false);
/*
elm.snapshotItem(i).addEventListener('mouseout', function(e) {
coverElm(e.target);
}, false);
*/
document.body.appendChild(thisCoverDiv);
}

for (var i = 0, l = flashElm.snapshotLength; i < l; i++) {
coverElm(flashElm.snapshotItem(i));
}

/*
document.addEventListener('DOMNodeInserted', function(e) {
flashElm = document.evaluate(
'./descendant-or-self::*[(self::embed or self::object) and (@type="application/x-shockwave-flash" or @type="application/x-silverlight-2")]',
e.target,
null,
7,
null);
for (var i = 0, l = flashElm.snapshotLength; i < l; i++) {
coverElm(flashElm.snapshotItem(i));
}
}, false);
*/
}, 0);
}, false);

何番煎じかは知らないけど書いてみた。
透明のdivかぶせるだけ。
一回動画の上でクリックすると動画を操作できるようになる。
ただしそれ以後は動画上でマウスジェスチャ不可。
Flash Player 10.1、Firefox 3.6.8、Opera 10.61の場合でのみ動作を確認。
一応Silverlightの上でもマウスジェスチャをできるようにしてある。
こちらはSilverlight 4で確認。


htmlの要素が上に重なってもマウスオーバーしていることはFlashに伝わるし
重なった要素の上じゃ右クリックメニューが出なくなるのが不思議。