是否有跨平台的方法从Firefox扩展中截屏?向Firefox扩展添加屏幕截图功能
理想情况下,我想能够采取一个DOM元素(不管它是在页面上可见或不可见)的截图,是这样的:
VAR截图截图=(的document.getElementById(”例如');
任何指针或建议将是很好,搜索https://developer.mozilla.org/仅产生,他们已经在各种指南中使用的截图
是否有跨平台的方法从Firefox扩展中截屏?向Firefox扩展添加屏幕截图功能
理想情况下,我想能够采取一个DOM元素(不管它是在页面上可见或不可见)的截图,是这样的:
VAR截图截图=(的document.getElementById(”例如');
任何指针或建议将是很好,搜索https://developer.mozilla.org/仅产生,他们已经在各种指南中使用的截图
检查几个扩展的代码后。我采取了以下方法(拍摄特定dom元素的快照)。这可以在一个Firefox扩展,可以用来把整个网页的截图,把浏览器窗口的截屏,并采取特定的DOM元素的截图(及其所有子节点):
function getElementScreenshot(elm) { var x = findPosX(elm); var y = findPosY(elm); var width = elm.clientWidth; var height = elm.clientHeight; var cnvs = document.getElementById("aCanvas"); cnvs.width = width; cnvs.height = height; var ctx = cnvs.getContext("2d"); // To take a snapshot of entire window // ctx.drawWindow(mainWindow.content, 0, 0, mainWindow.innerWidth, mainWindow.innerHeight, "rgb(255,255,255)"); ctx.drawWindow(mainWindow.content, x, y, width, height, "rgb(255,255,255)"); return(cnvs.toDataURL()); }
要找到一个元素的左上角坐标
function findPosX(obj) {
var curleft = 0;
if (obj.offsetParent) {
while (1) {
curleft += obj.offsetLeft;
if (!obj.offsetParent) {
break;
}
obj = obj.offsetParent;
}
} else if (obj.x) {
curleft += obj.x;
}
return curleft;
}
function findPosY(obj) {
var curtop = 0;
if (obj.offsetParent) {
while (1) {
curtop += obj.offsetTop;
if (!obj.offsetParent) {
break;
}
obj = obj.offsetParent;
}
} else if (obj.y) {
curtop += obj.y;
}
return curtop;
}
要访问从侧边栏browser.xul
var mainWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(Components.interfaces.nsIWebNavigation)
.QueryInterface(Components.interfaces.nsIDocShellTreeItem)
.rootTreeItem
.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(Components.interfaces.nsIDOMWindow);
mainWindow.gBrowser.addTab(...);
和下载Firefox的许多屏幕捕获扩展之一,并期待在他们的代码来看看。他们是怎么做的,例如Screengrab,Fireshot或Page Saver
谢谢,我看了一对夫妇,发现页面保护程序是最容易遵循和理解的一个。 – Ivan 2010-07-09 15:33:17
我想这将是这样的:
现在查看Tab Preview插件。谢谢 – Ivan 2010-07-09 15:33:46
感谢您在这里发布回复:) – flpmor 2010-07-15 18:12:29
这个解决方案的效果很好,虽然在YouTube上播放Flash视频时,如果拿SS,它会显示黑盒子而不是视频捕获。有没有解决这个问题的方法? – 2014-08-22 15:10:39
@Ivan:你是否可以将它作为附件上传?我可以使用它。显然,即使在今天,也没有可以直接使用的附加组件。 – 2016-03-12 11:30:18