Iva*_*van 7 firefox screenshot firefox-addon
是否有跨平台方法从firefox扩展中截取屏幕截图?
理想情况下,我希望能够截取dom元素的屏幕截图(无论它是否在页面上可见),例如:
var screenshot = screenshot(document.getElementById('example');
任何指针或建议都会很好,搜索https://developer.mozilla.org/只会产生他们在各种指南中使用的截图.
Iva*_*van 13
在检查了几个扩展的代码之后.我采用了以下方法(拍摄特定dom元素的快照).这可以在Firefox扩展中使用,以获取整个页面的屏幕截图,获取浏览器窗口的屏幕截图,并获取特定dom元素(及其所有子节点)的屏幕截图:
Run Code Online (Sandbox Code Playgroud)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;
}
Run Code Online (Sandbox Code Playgroud)
从侧边栏访问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(...);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2904 次 |
| 最近记录: |