向 Firefox 扩展添加屏幕截图功能

2024-03-25

是否有跨平台方法从 Firefox 扩展中获取屏幕截图?

理想情况下,我希望能够截取 dom 元素的屏幕截图(无论它在页面上是否可见),例如:

var 屏幕截图 = 屏幕截图(document.getElementById('example');

任何指示或建议都会很好,搜索https://developer.mozilla.org/ https://developer.mozilla.org/只产生他们在各种指南中使用的屏幕截图。


检查了几个扩展的代码后。我采用了以下方法(拍摄特定 dom 元素的快照)。这可以在 Firefox 扩展中使用来截取整个页面的屏幕截图、截取浏览器窗口的屏幕截图以及截取特定 dom 元素(及其所有子节点)的屏幕截图:

  1. 将画布添加到xul。
  2. 查找元素的尺寸和左上角坐标。
  3. 将窗口的一部分复制到画布。
  4. 将画布转换为 Base64 PNG 文件。
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(...);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

向 Firefox 扩展添加屏幕截图功能 的相关文章

  • 为什么我不能在 try 块内定义之前使用 Javascript 函数?

    正如所讨论的here https stackoverflow com questions 261599 why can i use a function before its defined in javascript 函数定义可以在定义之
  • 硒 + 火狐 + HTTPS

    好的 我知道我问的是一个老生常谈的问题 但我发布这个问题是因为尽管尝试了各种链接上提供的所有解决方案 但我的问题仍未得到解决 我的限制 我不想使用保存的 Firefox 配置文件来保存网站的证书 Selenium 服务器版本 2 0b3 尝
  • SyntaxError:属性列表后缺少 } [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions Firef
  • html5中的canvas元素是否硬件加速?

    我对 Web 开发还很陌生 事实上我正在考虑深入研究 html 和 js 来进行游戏开发 因此 在做任何事情之前 我需要知道 html5 中的 canvas 元素是否是硬件加速的 如果不是 那么我需要使用像 webgl 这样的东西 我不知道
  • Mozilla Firefox 不再支持dialog.showModal

    我有一个巨大的 asp 网站项目及其弹出窗口 使用自showModalDialog 几个月前mozilla更新了 这个功能出现了一些问题 所以我用了ModalDialog 填充 https github com niutech showMo
  • Wappalyzer如何检测网页技术

    Wappalyzer 如何检测站点的后端编程语言 但在某些情况下无法检测 例如 Facebook 使用 PHP 但无法检测并显示 HTTP 2 Wappalyzer 是一个开源社区驱动的平台 其所有源代码都可以在此链接中找到 https g
  • 未将焦点设置到 Firefox 中的文本字段

    我遇到了一个非常有趣的问题 我正在尝试设置focus在使用 Javascript 的输入字段上 没有 jQuery 我也尝试过但没有成功 使用window onLoad 看看这个小提琴 加载时设置焦点 http jsfiddle net r
  • 无法找到与 selenium 3.8.1 和 gecko 驱动程序 0.19.0 匹配的功能集

    import org openqa selenium By import org openqa selenium WebDriver import org openqa selenium chrome ChromeDriver import
  • 获取 HTML 元素相对于窗口的边界框的正确方法是什么?

    我正在编写一个 Firefox 扩展 我试图将其限制为仅 XUL Javascript 无 XPCOM 当我得到一个mouseover对于 HTML 元素的事件 我需要获取其在 Windows 坐标系中的边界框 即内置 XUL 文档 bro
  • Firefox createMediaStreamDestination 使用 rtc 的错误?

    我通过 rtc 流式传输音频并想要静音和取消静音音频 这有效 但没有增益控制 function stream getUserMedia stream console log Access granted to audio video pee
  • 如何使用 C# 获取 Mozilla 浏览器的当前位置 URL? [复制]

    这个问题在这里已经有答案了 可能的重复 获取 Firefox 网址 https stackoverflow com questions 430614 get firefox url 我在开发 Windows 应用程序以获取正在运行的 Moz
  • Firebug 分析问题:“没有要分析的活动”

    我想用一些 javascript jQuery 尝试一些不同的选项 看看哪个是最快的 但是我无法让分析正常工作 这是我要测试的代码 this keypress function e console profile test retrieve
  • 为什么WAV格式在不同的浏览器中没有相同的mimetype?

    文件输入在 Chrome 或 Firefox 中为同一文件提供不同的 Mimetype 我有一个我想上传的 wav 文件 chrome 说是audio wav和火狐检测audio x wav 我知道这两个 mimetype 非常相似 x 代
  • 如何在 Firefox 和 Chrome 中选择文档模式而不设置 DOCTYPE?

    我正在努力将使用旧网络标准创建的网页转换为支持现代网络浏览器 目前 该网页在 Internet Explorer 9 Firefox 和 Chrome 中以 Quirks 模式呈现 在 IE9 中 我可以选择 文档模式 在其中呈现我正在查看
  • 当鼠标悬停在选择下拉列表上时,包含 div 会失去焦点

    我有一个 div 当您将鼠标悬停在其容器上时 该 div 会出现 并且该 div 是绝对定位的 因此它会出现在其容器之外 它里面有多个选择下拉菜单 当我尝试更改其中任何一个的值时 焦点就会丢失 它会触发容器上的鼠标移出 我在这里设置了这个问
  • 通过浏览器的“BACK”功能加载页面时触发 onload 脚本(js 或 jQuery)

    当通过浏览器的 后退 按钮或键盘命令到达页面时 我找不到执行脚本的方法 背景 我需要知道是否使用浏览器的 后退 按钮或键盘命令打开页面 然后我可以检查存储的 sessionStorage 变量并触发一些适当的内容 例如 如果我将其放入我的页
  • Firefox:按下鼠标按钮时鼠标悬停不起作用

    这是我想做的 https gfycat com ValidEmbarrassedHochstettersfrog https gfycat com ValidEmbarrassedHochstettersfrog 我想强调一些 td 对象在
  • Firefox 扩展中的 localStorage

    我正在尝试从 Firefox 扩展访问页面的 localStorage 我的理解是content给出了参考window当前页面的 当我尝试访问页面的 localStorage 时content localStorage 我想我正在得到它的参
  • 屏幕截图忽略了一些窗口

    我正在 MFC 中工作 我正在尝试捕获桌面的 bmp 我正在使用 GetDC NULL 来执行此操作 但它似乎忽略了特殊的皮肤窗口 它似乎忽略了用 UpdateLayeredWindow 绘制的窗口 此行为似乎仅发生在 Vista x64
  • Firefox OS 后台服务

    我想构建一个应用程序 用户可以通过它输入一些设置 并且应用程序将启动后台服务来根据这些设置执行一些任务 我只想在模拟器中运行应用程序和后台服务 我知道它需要 认证 模式才能运行后台服务 但我现在不考虑在 Firefox Marketplac

随机推荐

  • 有没有办法阻止 pandas to_json 添加 \?

    我正在尝试将 pandas 数据帧发送到 json 但我遇到了一些日期问题 我得到了一个额外的 以便我的记录看起来像Updated 09 06 2016 03 09 44 是否可以不添加这个额外的 我假设它是某种转义字符 但我无法找到与此相
  • Laravel 5.3 - InvalidArgumentException 查看 [索引] 未找到 [重复]

    这个问题在这里已经有答案了 I 已经部署我的 Laravel 应用程序到我的VPS 它在本地主机上运行良好 我认为错误出在我的路由中 或者可能是控制器中 因为路径仍然进入我的本地计算机目录 请参阅错误消息第 2 行 但我确实看不到代码中的问
  • 在 MySQL 中使用 JOIN 时避免出现不明确的列错误

    我的查询如下所示 sql SELECT u s FROM bands u inner join statuses s on u status id s id WHERE u status id 1 ORDER BY u band name
  • CGBitmapContextCreate:不支持的参数组合

    我正在尝试创建一个 8 位灰度上下文 如下所示 CGColorSpaceRef colorSpace CGColorSpaceCreateDeviceGray CGContextRef context CGBitmapContextCrea
  • Interface Builder:如何清理已删除的约束?

    我使用命令删除来删除 IB 中地图视图小部件的一些约束 正如附图所示 约束实际上只是褪色 而不是完全删除 我已经尝试过保存文件并重新打开项目 但似乎它们不会被 XCode 删除 我怎样才能将它们删除 EDIT 这是我在尺寸检查器窗口中看到的
  • 连续输入时不要引发 TextChanged

    我有一个相当大的文本框 TextChanged事件处理程序 在正常打字条件下 性能还不错 但当用户执行长时间连续操作时 例如按住退格按钮一次删除大量文本 它可能会明显滞后 例如 事件需要 0 2 秒才能完成 但用户每 0 1 秒执行一次删除
  • 仅用图像制作按钮的最简单方法

    我正在使用 Delphi XE 我想制作一个按钮 仅显示提供的具有透明背景的 PNG 图像 并且没有任何类型的附加边距 我尝试使用 TButton 执行此操作 但我得到了 bsPushButton 样式的难看的灰色背景 如果我使用 bsCo
  • Gradle 无法解析 com.google.android.gms:play-services-auth:11.6.0 [重复]

    这个问题在这里已经有答案了 我正在尝试在我的移动应用程序中使用谷歌登录 但在遵循谷歌的教程后出现以下错误 无法解析 com google android gms play services auth 11 6 0 我的 gradle 文件
  • 在 UIButton 内显示活动指示器

    我想在按下 UIButton 后将其内容更改为 ActivityIndi cator 我知道按钮有 imageView 和 titleLabel 但我不知道如何在其中放置活动指示器 这就是我创建活动指标的方法 let aiView UIAc
  • PostgreSQL ORDER BY 列位置(而不是按列名称)

    基本上 我不想要 SELECT firstname lastname FROM person ORDER BY lastname 反而 SELECT firstname lastname FROM person ORDER BY
  • 单个 XSLT 文件能否解决这个问题……或者……?

    下面是我的 XML 文件
  • do while 循环不能有两个 cin 语句吗?

    我只是遵循一个关于 do while 循环的简单 C 教程 我似乎已经完全复制了教程中编写的内容 但我没有得到相同的结果 这是我的代码 int main int c 0 int i 0 int str do cout lt lt Enter
  • 如何在 BigQuery 中透视表

    我正在使用 Google Big Query 并且正在尝试从公共样本数据集中获取数据透视结果 对现有表的简单查询是 SELECT FROM publicdata samples shakespeare LIMIT 10 该查询返回以下结果集
  • 如何前进到字节流中包含的压缩字节序列?

    我有一个字节流 它是多个部分的串联 其中每个部分都由一个标头和一个紧缩的字节流组成 我需要拆分此字节流部分 但标头仅包含有关未压缩形式的数据的信息 没有有关压缩数据长度的提示 因此我可以在流中正确前进并解析下一部分 到目前为止 我发现超越压
  • Rake 任务 Rails:upgrade:check 在 Windows 上不起作用。 Rails 3 升级问题

    有什么解决方案可以解决Windows上的rake任务rails upgrade check的问题吗 为了解决这个问题 我安装了这个 gem gem install POpen4 v 0 1 4 gem install win32 open3
  • 您如何组织 NInject 模块?

    NInject 的模块架构看起来很有用 但我担心它会变得有点混乱 您如何组织模块 您将它们保留在哪个组件中 您如何决定哪些接线进入哪个模块 每个子系统都有一个模块 当然 什么值得归类为 子系统 的定义取决于 在某些情况下 某些绑定的责任被推
  • 我的自定义开放图对象的自定义属性未显示在共享对话框中

    我无法获取 Android 应用程序的共享对话框中显示的自定义开放图对象的自定义属性 我创建了一个自定义对象channel在命名空间中myradio android 并定义了一个自定义属性当前歌曲标题在频道中 我还创建了一个自定义操作enj
  • 将 Marketo 表单添加到 Gatsby/JSX

    我正在尝试将 Marketo 表单添加到 Gatsby 站点中 但在将脚本注入页面的顺序方面遇到问题 当我尝试渲染下面的组件时 收到错误消息 ReferenceError MktoForms2 未定义 我尝试注释掉整个 useEffect
  • 如何在 UIMarkupTextPrintFormatter 中添加图像?

    我正在尝试使用直接 HTML 打印文件 但是 在将图像添加到打印文件中时遇到困难 如何在我要打印的 HTML 中引用项目中的图像 UIMarkupTextPrintFormatter 支持标签吗 实际上比我想象的要简单得多 NSString
  • 向 Firefox 扩展添加屏幕截图功能

    是否有跨平台方法从 Firefox 扩展中获取屏幕截图 理想情况下 我希望能够截取 dom 元素的屏幕截图 无论它在页面上是否可见 例如 var 屏幕截图 屏幕截图 document getElementById example 任何指示或