一直找不到在FireFox中实现类似GreenBrowser中的右键拖动页面的插件,想要自己写一个吧,好像挺复杂的。今天看到有一个GreaseMonkey的插件容器,大大降低自己写插件的难度,于是写了一个,只有几十行。其中被一个陷阱困惑了很久,就是GreaseMonkey的Javascript脚本中不能用类似window.onmousedown=function(){}的方式来处理事件,必须用window.addEventListerner('mousedown',function(){},true)来处理,其中原因请看http://www.oreillynet.com/pub/a/network/2005/11/01/avoid-common-greasemonkey-pitfalls.html?page=3。
源码如下:
// ==UserScript ==
// @name Right Mouse Dragging
// @namespace http://amonw.cnblogs.com/rightmousedragging
// @description Use right mouse button to drag your web pages
// @include *
// ==/UserScript==
/*
Version:1.0
Author: Amonw
http://amonw.cnblogs.com
Change log:
Ver 1.0: First version
*/
var beginDrag=beginDragX=beginDragY=0;
function f(E)
{
E.preventDefault();
E.stopPropagation();
return false;
}
window.addEventListener('mousedown',function(E)
{
if(E.button==2 && beginDrag==0)
{
beginDrag=1;
beginDragX=E.screenX;
beginDragY=E.screenY;
}
document.removeEventListener('contextmenu',f,true);
},true);
window.addEventListener('mousemove',function(E)
{
if(beginDrag==1 && (beginDragX!=E.screenX || beginDragY!=E.screenY))
{
document.addEventListener('contextmenu',f,true);
window.scrollBy((beginDragX-E.screenX),(beginDragY-E.screenY));
beginDragX=E.screenX;
beginDragY=E.screenY;
}
},true);
window.addEventListener('mouseup',function(E)
{
if(E.button==2 && beginDrag==1)
{
beginDrag=0;
E.preventDefault();
E.stopPropagation();
E.returnValue=false;
}
},true);