如何在 Chrome 扩展程序中捕获单个 HTML 元素的屏幕截图?

2024-02-13

我知道有一个捕获可见选项卡 http://developer.chrome.com/extensions/tabs.html#method-captureVisibleTab,但是如何剪切选项卡的屏幕截图,以便只留下一个 HTML 元素?


为此你需要消息上 https://developer.chrome.com/extensions/runtime#event-onMessage, 发信息 https://developer.chrome.com/extensions/tabs#method-sendMessage, and 捕获可见选项卡 https://developer.chrome.com/extensions/tabs#method-captureVisibleTab. The onMessage是一种方法chrome 运行时 https://developer.chrome.com/extensions/runtime, sendMessage, and captureVisibleTab都是方法tabs https://developer.chrome.com/extensions/tabs.

Manifest

在清单文件中,您必须添加tabs, and <all_urls>给你的权限manifest https://developer.chrome.com/extensions/manifest文件。如果没有权限,这将无法工作。

"permissions": [
    "tabs",
    "<all_urls>"
],

内容脚本

在您的内容脚本文件中,您需要添加以下内容。这允许您与后台页面通信以获取活动选项卡的屏幕截图。

chrome.runtime.sendMessage({ chromeAction: "screenshot" }, function (imageString) {
    console.log(imageString);
});

背景脚本/页面

这就是奇迹发生的地方。

chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
    if (request.chromeAction === "screenshot") {
        createScreenshot(function (dataURL) {
            createImage(dataURL);
        });
        return true;
    }
});

// here we create a new image
function createImage(dataURL) {
    // create a canvas
    var canvas = createCanvas(500, 500);
    // get the context of your canvas
    var context = canvas.getContext('2d');
    // create a new image object
    var croppedImage = new Image();

    croppedImage.onload = function() {
        // this is where you manipulate the screenshot (cropping)
        // parameter 1: source image (screenshot)
        // parameter 2: source image x coordinate
        // parameter 3: source image y coordinate
        // parameter 4: source image width
        // parameter 5: source image height
        // parameter 6: destination x coordinate
        // parameter 7: destination y coordinate
        // parameter 8: destination width
        // parameter 9: destination height
        context.drawImage(croppedImage, 10, 10, 300, 300, 0, 0, 250, 250);

        // canvas.toDataURL() contains your cropped image
        console.log(canvas.toDataURL());
    };
    croppedImage.src = dataURL; // screenshot (full image)
}

// creates a canvas element
function createCanvas(canvasWidth, canvasHeight) {
    var canvas = document.createElement("canvas");

    // size of canvas in pixels
    canvas.width = canvasWidth;
    canvas.height = canvasHeight;
    return canvas;
}

// calling the captureVisibleTab method takes a screenhot
function createScreenshot(callback) {
    // you can have two image formats (jpeg and png)
    // for jpeg use { format: "jpeg", quality: 100 } (you can adjust the jpeg image quality from 0-100) 
    // for png use { format: "png" }
    chrome.tabs.captureVisibleTab(null, { format: "png" }, callback);
}

Cropping

为了更好地了解drawImage画布方法 阅读全文文档 https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D#drawImage.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Chrome 扩展程序中捕获单个 HTML 元素的屏幕截图? 的相关文章

  • Chrome 中的 jQuery 动画问题

    我使用 jQuery 1 3 2 和 jQuery 颜色插件为 jQuery 中的 a 元素设置动画 我同时对 颜色 和 背景颜色 属性进行动画处理 在 IE8 和 FF 中它运行得很好 Chrome 对鼠标悬停颜色进行动画处理 然后停止
  • 如何为 pageAction 添加点击?

    第一次延期 请友善 我的目标是在用户访问来自特定域的页面时提供一个选项 以提供启动另一个页面的选项 该页面使用所访问页面的域名的一部分作为变量 下面的代码执行了我想要的操作 但它没有提供该操作作为选项 它只是执行 当访问与域匹配的页面时 它
  • 为什么这个 chrome.browserAction.setIcon 方法不起作用?

    我正在查看文档页面 https developer chrome com extensions browserAction method setIcon我不知道我的代码有什么问题 chrome browserAction setIcon d
  • 添加文件://. chrome 扩展程序的权限

    如何使用 Chrome 扩展启用 file 的权限 在我的manifest json中我尝试过 permissions file and permissions file 也 permissions C 这些都不起作用 permission
  • 如何读取COM端口? navigator.serial.getPorts 返回空列表

    我连接了少量 USB 串行接口 一个 HF 收发器 基于 Arduino 的 CW 键控器 和两个蓝牙端口 我从未使用过它们 并且不确定它们来自哪里 可能是某些应用程序 在我的 SPA 中 我需要阅读端口列表 以便能够选择连接哪个端口作为哪
  • 从 Chrome 扩展程序中设置活动页面中的值活动输入

    I wrote an extension for Chrome I want when I click on button from my extension the value abc will be set into active in
  • Active Adblock Plus 在 Chrome JS 控制台中显示奇怪的错误

    我使用 Chrome 浏览的每个页面都会在控制台中显示此错误 扩展 uncaught exception handler 8 事件处理程序中出现错误 未知 SyntaxError 无法在 CSSStyleSheet 上执行 insertRu
  • getElementById 无法在 的 Google Chrome 扩展中工作

    在我的 Google Chrome 扩展内容脚本中 我有以下内容 jQuery document ready function var player document getElementById player console log pl
  • 禁用 Chrome 66 的自动完成功能

    在 chrome 66 中 我找不到像以前那样禁用文本输入自动完成功能的方法 我试过autocomplete off and autocomplete new password 我认为它在 Chrome 63 之前一直有效 但现在不再有效了
  • Chrome 19 无法识别字体粗细:较轻

    我刚刚启动了一个正在开发的项目以进行一些修改 并注意到该声明font weight lighter正在通过以下方式提供服务 font face并且它不再在网站上运行 参见图片 顶部镀铬 底部 ff 自昨晚以来 我的系统 Windows 上没
  • 如何从上下文菜单中显示模式弹出窗口?

    如何从上下文菜单中显示模式对话框 我可以从上下文菜单中显示一个新窗口 该窗口在自己的选项卡中打开 var menuItem id rateMenu title Rate Item contexts all chrome contextMen
  • 后退按钮 (Chrome) 在 Play Framework 中获取 Json 而不是 HTML

    各位 我有一个 Web 应用程序 我在其中对同一资源的 JSON 和 HTML 表示重复使用了相同的路由 现在我们将其称为 foo details 该页面是从 bar details 链接的 因此 查看 bar details 您会看到链接
  • 如何防止 Google Chrome 阻止我的弹出窗口?

    在我的网站上有一个按钮 用于调用一个函数 该函数调用window open不过 最近需要进行调整 在弹出窗口打开之前进行服务器端检查 自从添加执行 AJAX 调用的代码后 浏览器就会阻止在successAJAX 调用的回调 我读到 如果用户
  • Chrome 浏览器上的自动文件下载限制为 10 个文件

    我有一个网页 我们根据用户对页面项目的选择生成 PDF 这会导致回发 它是一个 ASP NET WebForms 页面 从而在服务器端创建 PDF 一个 a class documentDownload 然后将标签添加到每个项目的页面 当页
  • 浏览器特定的 CSS 属性

    在哪里可以找到完整的 浏览器特定 css 属性 参考 我的意思是一些属性 例如 moz border radius这仅适用于 Firefox 或 webkit min device pixel ratio 这些示例仅适用于指定的 Web 浏
  • twitter bootstrap css 在 chrome 扩展中发生冲突

    我正在使用 bootstrap 来编写我正在编写的 chrome 扩展 当作为内容脚本导入时 CSS 似乎与我正在查看的许多网站发生冲突 即使在谷歌搜索结果页面中 想知道我是否可以做些什么来将其范围限制为我使用内容脚本注入的 dom 元素
  • Chrome 扩展程序中的后台脚本到底何时运行?

    在我的 chrome 扩展中 我有一个后台脚本 它将使用XMLHttpRequest note that this code is in the global scope i e outside of any function also n
  • History.replaceState 仍然向“浏览历史记录”添加条目

    具体来说 调用以下代码片段 history replaceState undefined undefined value 正确地不会影响当前页面的后退按钮行为 但是will在 浏览历史记录 页面添加一个条目 这是我不想要的 下图是 Chro
  • 阻止特定 URL 进行测试的最佳方法是什么?

    我正在使用 Google Chrome 和 Fiddler 版本 4 4 观察一个网站 该页面正在使用 AJAX 来更新其数据 我想阻止特定的 URL 以测试如果它不起作用会发生什么 阻止 URL 最简单的方法是什么 你希望发生什么 转到自
  • 浏览器会自动插入哪些 DOM 元素?

    我正在生成 XPaths 服务器端以供客户端使用 我很困惑为什么only表路径 即内容在td 在 DOM 中找不到 事实证明 现代浏览器 至少 Chrome 和 Firefox 插入了tbody文档加载时在表格行周围添加标签 看为什么浏览器

随机推荐

  • 使用Socket或UdpClient进行多播有功能上的区别吗?

    我正在熟悉多播等 主要使用了 2 个示例 Using Socket with Bind UDPClient JoinMulticastNetwork 一个指定一个离开组播组 http www dart com udp multicast c
  • 使用 ini 文件进行 Spring MVC 和 Shiro 配置

    我正在尝试使用 Spring MVC 和 Apache Shiro 建立一个环境 我正在关注 shiro apache org 中提到的文章 我在 web xml 中使用 Spring 的 DelegatingFilterProxy 作为
  • 将 Unicode 文本写入文本文件?

    我从 Google 文档中提取数据 对其进行处理 然后将其写入文件 最终我会将其粘贴到 Wordpress 页面中 它有一些非 ASCII 符号 如何将这些安全地转换为可在 HTML 源代码中使用的符号 目前 我正在将所有内容转换为 Uni
  • 选择排序算法的标准是什么?

    我正在阅读排序方法 其中包括冒泡排序 选择排序 合并排序 堆排序 桶排序等 它们还包含时间复杂度 可以帮助我们知道哪种排序是有效的 所以我有一个基本问题 如果我们包含数据 那么我们将如何选择排序 时间复杂度是帮助我们决定排序方法的参数之一
  • 我想从网页中提取数据,但最后我无法在工作表中写入数据。数据是表格形式(多行,列)?

    无法从网页中提取数据 并且在工作表中写入数据也出现问题 子拉取数据 宣言 Dim IE As Object Dim doc As HTMLDocument 启动应用程序 Set IE CreateObject InternetExplore
  • Alloy 内置整数数学函数在导入的文件中不起作用

    我在 avlTree als 中有一个合金模型 该模型使用整数算术 特别是加号和减号函数 该模型中有一些断言 我可以使用合金分析器 GUI 很好地运行这些断言 我在 test als 中有另一个合金模型 该模型导入 avlTree 使用 o
  • 采样 Pandas Dataframe 的最快方法?

    首先 我想从三个数据帧 每个 150 行 中随机采样并连接结果 其次 我想尽可能多地重复这个过程 对于第 1 部分 我使用以下函数 def get sample n A n B n C A df A sample n n A replace
  • 何时以及为何使用“致电”和“申请”?

    首先我知道了 apply 和 call 之间的区别 function theFunction name profession alert My name is name and I am a profession theFunction J
  • 如何仅支持一个 UIView 的横向/纵向方向

    我的基于导航的应用程序中有 5 个视图控制器 我需要仅在一个视图中支持横向 纵向模式 以下项目显示在视图中 导航栏 有两个按钮的工具栏 UIImageView 位于中心 UILabe位于导航栏下方 任何人都可以帮助我如何支持方向更改为仅针对
  • 为什么 onBackPressed() 没有被调用?

    我正在尝试重写 onBackPressed 但是 当我单击操作栏中的后退按钮时 它似乎无法检测到 我目前有这个代码 Override public void onBackPressed Log i DATA Hit onBackPresse
  • Rails 身份验证策略

    希望这不是太宽泛 但经过大量谷歌搜索后 我不知道从哪里开始 我正在寻找介绍性 新手概述来帮助我开始为 Rails 3 应用程序构建身份验证实现 基本技术要求 Rails 3 应用程序托管在第三方服务 heroku 上 需要使用特定的外部私有
  • 列名称或提供的值的数量与表定义不匹配。为什么?

    我缺少什么 create table Diver diver number int primary key check diver number gt 0 not null first name char 30 not null last
  • 关于Spring框架应用程序中的JDBC中RowMapper使用的一些疑问

    我正在研究如何在 Spring 框架中使用 JDBC 对数据库执行查询 我正在关注这个教程 http www tutorialspoint com spring spring jdbc example htm http www tutori
  • 理解打字稿类中的“公共”/“私有”

    在下面的脚本代码中 无论名称是 public 还是 private 生成的java脚本代码是相同的 所以我的问题是 如何决定何时构造函数参数应该是 公立还是私立 typescript code class Animal constructo
  • 设置所有者设备应用程序后,为什么我无法创建受限配置文件?

    我最近注意到 当设备所有者申请设置后 无法创建受限配置文件 第一个案例 当我的设备所有者应用程序未设置 From 设置 gt 用户 我可以 添加用户或个人资料 然后选择一个User or a 受限个人资料 第二种情况 当我的设备所有者应用程
  • Rubygem God:进程的时间限制配置

    我在我的 Rails 应用程序中使用 resque resque scheduler gems 为了监控 resque 工作人员的工作 我正在使用 God 工具 我想添加这样一个上帝配置 它将监视resque工作器中运行的作业的时间 如果进
  • 是否可以使用可扩展列表视图作为微调器的下拉视图?

    我有一个二维字符串数组 我想使用微调器来允许用户从数组的第二级中选择值 但我想使用数组的第一级的值作为类别标题在可扩展列表视图中显示选择选项 这可能吗 有人可以指出我应该如何实施的正确方向吗 您不能直接使用ExpandableListVie
  • 严重损坏的 git 存储库

    接下来的内容很长 所以简而言之 我有一个严重损坏的存储库 我有备份 并且我想返回到稳定状态 以便我可以恢复文件 如果必须的话 可以手动恢复 我将整个存储库复制到另一个文件夹中 其中包含我的更改列表 因此如果这一切都变坏了 我可以轻松手动传输
  • mongo.exe 有更好的 shell [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个问题似乎不是关于主要由程序员使用的特定编程问题 软件算法或软件工具 help on topic 如果您认为该问题与主题相关另一个 St
  • 如何在 Chrome 扩展程序中捕获单个 HTML 元素的屏幕截图?

    我知道有一个捕获可见选项卡 http developer chrome com extensions tabs html method captureVisibleTab 但是如何剪切选项卡的屏幕截图 以便只留下一个 HTML 元素 为此你