在FireFox中实现类GreenBrowser的右键拖动

一直找不到在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);

原文地址:https://www.cnblogs.com/amonw/p/449883.html