阅读:3828回复:7
请问能否给这个截图脚本加上鼠标手势或快捷键呢?
很好用的一个网页截屏脚本,可以把整幅(从头到脚)网页另存为图片
可惜每次要到菜单里去点——我的菜单设置ALT打开的,比较麻烦。 请问各位达人能否给这脚本加上鼠标手势或快捷键?或者另推荐一款脚本也好啊 多谢啦 :) // ==UserScript== // @name Capture Web Page for userChrome.js // @include main // @include chrome://browser/content/browser.xul // ==/UserScript== /* 网页截图 - Griever - http://d.hatena.ne.jp/Griever/20081222/1229958279 を勝手にuserChrome.js化 */ //ページ全体をキャプチャ (function(){ var captureMenu = document.createElement("menuitem"); captureMenu.setAttribute("label","Capture This Page"); captureMenu.addEventListener("command",function(){ var win = window.content; var w = win.document.width; var h = win.document.height; var pos = document.getElementById('status-bar'); var scrollbox = document.createElement('scrollbox'); scrollbox.width = '1'; scrollbox.height = '1'; pos.appendChild(scrollbox); var canvas = win.document.createElement('canvas'); canvas.style.display = 'inline'; canvas.width = w; canvas.height = h; scrollbox.appendChild(canvas); var ctx = canvas.getContext("2d"); ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.save(); ctx.scale(1.0, 1.0); ctx.drawWindow(win, 0, 0, w, h, "rgb(255,255,255)"); ctx.restore(); var url = canvas.toDataURL("image/png"); const IO_SERVICE = Components.classes['@mozilla.org/network/io-service;1'] .getService(Components.interfaces.nsIIOService); url = IO_SERVICE.newURI(url, null, null); var fp = Components.classes['@mozilla.org/filepicker;1'] .createInstance(Components.interfaces.nsIFilePicker); fp.init(window, "Save Screenshot As", fp.modeSave); fp.appendFilters(fp.filterImages); fp.defaultExtension = "png"; fp.defaultString = win.document.title + ".png"; if ( fp.show() == fp.returnCancel || !fp.file ) return; var wbp = Components.classes['@mozilla.org/embedding/browser/nsWebBrowserPersist;1'] .createInstance(Components.interfaces.nsIWebBrowserPersist); wbp.saveURI(url, null, null, null, null, fp.file); pos.removeChild(scrollbox); },false); document.getElementById("menu_ToolsPopup").insertBefore( captureMenu, document.getElementById("sanitizeSeparator")); })(); |
|
1楼#
发布于:2010-01-18 12:22
我还是WebScreenShot,甚少截屏,但是看重它可以把网页中的图片转化为base64
|
|
2楼#
发布于:2010-01-18 12:22
|
|
3楼#
发布于:2010-01-18 12:22
存UTF-8看看
不加修改应该会有多余代码 主要是注意到底哪个function函数是执行你需要的功能的,留意一下括号的封闭,还有一些是往菜单里加东西的,就明显不需要了 |
|
4楼#
发布于:2010-01-18 12:22
哈哈,多谢xelnaga
我用过screengrab,它的全页面截屏不能用……怪哉 我把你给我的代码一股脑扔到“MouseGestures.uc.js”(http://www.xuldev.org/misc/ucjs.php)里面了…… 居然都好用,哈哈,多谢多谢 只是划手势的时候以前状态栏里的中文提示“鼠标手势:……”变成了英文的“Gesture:……” 我自己到脚本里找这个单词,改成中文(用EditPlus修改),出来的是乱码……汗 请问大侠,我直接粘贴到MouseGestures.uc.js里面是否有多余的代码呢?要删掉点什么吗? 多谢~~~ |
|
5楼#
发布于:2010-01-18 12:22
我建议你装screengrab这个扩展
如果你执意装脚本 参看一下这贴 https://www.firefox.net.cn/forum/viewtopic.php?t=29712 以后可以自行解决 -------------------- 我把你的截屏功能加到手势脚本里了 注意,修改后的脚本只有截屏一个功能 另外假定你没有其他手势脚本或扩展 否则可能出现无法预计的冲突 手势是 左右左 ======== // ==UserScript== // @name sgrab // @namespace http://www.xuldev.org/ // @include main // @compatibility Firefox 3.5 // @author Gomita // @version 1.0.20080201 // @homepage http://www.xuldev.org/misc/ucjs.php // ==/UserScript== var ucjsMouseGestures = { _lastX: 0, _lastY: 0, _directionChain: "", init: function() { gBrowser.mPanelContainer.addEventListener("mousedown", this, false); gBrowser.mPanelContainer.addEventListener("mousemove", this, false); gBrowser.mPanelContainer.addEventListener("mouseup", this, false); gBrowser.mPanelContainer.addEventListener("contextmenu", this, true); }, uninit: function() { gBrowser.mPanelContainer.removeEventListener("mousedown", this, false); gBrowser.mPanelContainer.removeEventListener("mousemove", this, false); gBrowser.mPanelContainer.removeEventListener("mouseup", this, false); gBrowser.mPanelContainer.removeEventListener("contextmenu", this, true); }, _isMouseDown: false, _suppressContext: false, _shouldFireContext: false, // for Linux handleEvent: function(event) { switch (event.type) { case "mousedown": if (event.button == 2) { this._isMouseDown = true; this._startGesture(event); } break; case "mousemove": if (this._isMouseDown) { this._progressGesture(event); } break; case "mouseup": if (this._isMouseDown) { this._isMouseDown = false; this._suppressContext = !!this._directionChain; this._stopGesture(event); if (this._shouldFireContext) { this._shouldFireContext = false; this._displayContextMenu(event); } } break; case "contextmenu": if (this._suppressContext || this._isMouseDown) { this._suppressContext = false; event.preventDefault(); event.stopPropagation(); if (this._isMouseDown) { this._shouldFireContext = true; } } break; } }, _displayContextMenu: function(event) { var evt = event.originalTarget.ownerDocument.createEvent("MouseEvents"); evt.initMouseEvent( "contextmenu", true, true, event.originalTarget.defaultView, 0, event.screenX, event.screenY, event.clientX, event.clientY, false, false, false, false, 2, null ); event.originalTarget.dispatchEvent(evt); }, _startGesture: function(event) { this._lastX = event.screenX; this._lastY = event.screenY; this._directionChain = ""; }, _progressGesture: function(event) { var x = event.screenX; var y = event.screenY; var distanceX = Math.abs(x - this._lastX); var distanceY = Math.abs(y - this._lastY); // minimal movement where the gesture is recognized const tolerance = 10; if (distanceX < tolerance && distanceY < tolerance) return; // determine current direction var direction; if (distanceX > distanceY) direction = x < this._lastX ? "L" : "R"; else direction = y < this._lastY ? "U" : "D"; // compare to last direction var lastDirection = this._directionChain.charAt(this._directionChain.length - 1); if (direction != lastDirection) { this._directionChain += direction; XULBrowserWindow.statusTextField.label = "Gesture: " + this._directionChain; } // save current position this._lastX = x; this._lastY = y; }, _stopGesture: function(event) { try { if (this._directionChain) this._performAction(event); XULBrowserWindow.statusTextField.label = ""; } catch(ex) { XULBrowserWindow.statusTextField.label = ex; } this._directionChain = ""; }, // ============================ 添加部分============================ screengrab: function(){ var win = window.content; var w = win.document.width; var h = win.document.height; var pos = document.getElementById('status-bar'); var scrollbox = document.createElement('scrollbox'); scrollbox.width = '1'; scrollbox.height = '1'; pos.appendChild(scrollbox); var canvas = win.document.createElement('canvas'); canvas.style.display = 'inline'; canvas.width = w; canvas.height = h; scrollbox.appendChild(canvas); var ctx = canvas.getContext("2d"); ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.save(); ctx.scale(1.0, 1.0); ctx.drawWindow(win, 0, 0, w, h, "rgb(255,255,255)"); ctx.restore(); var url = canvas.toDataURL("image/png"); const IO_SERVICE = Components.classes['@mozilla.org/network/io-service;1'] .getService(Components.interfaces.nsIIOService); url = IO_SERVICE.newURI(url, null, null); var fp = Components.classes['@mozilla.org/filepicker;1'] .createInstance(Components.interfaces.nsIFilePicker); fp.init(window, "Save Screenshot As", fp.modeSave); fp.appendFilters(fp.filterImages); fp.defaultExtension = "png"; fp.defaultString = win.document.title + ".png"; if ( fp.show() == fp.returnCancel || !fp.file ) return; var wbp = Components.classes['@mozilla.org/embedding/browser/nsWebBrowserPersist;1'] .createInstance(Components.interfaces.nsIWebBrowserPersist); wbp.saveURI(url, null, null, null, null, fp.file); pos.removeChild(scrollbox); }, _performAction: function(event) { // These are the mouse gesture mappings. Customize this as you like. switch (this._directionChain) { // screengrab case "LRL": this.screengrab(); break; // Unknown Gesture default: throw "Unknown Gesture: " + this._directionChain; } } }; // Entry Point ucjsMouseGestures.init(); window.addEventListener("unload", function(){ ucjsMouseGestures.uninit(); }, false); |
|
6楼#
发布于:2010-01-18 12:22
方向错了吧
不是在它里面加手势,是在手势里面加上截屏功能 |
|
7楼#
发布于:2010-01-18 12:22
找了个截屏脚本WebScreenShot.uc.xul
可惜在我机器上导致FF死掉……cpu占用50%,内存飙升……也没有快捷、手势之类的…… 达人现身啊,呵呵 多谢 |
|