开发Chrome插件实现在Chrome中截取网页

之前一直在考虑一个在浏览器上实现截屏的问题,搜索了一下了解了些情况。

在初期想到的是如何通过JS把网页变为图片,网上有相应的开源项目,例如https://github.com/niklasvh/html2canvas. 这个组件试了一下在本机上还是有些问题。

除了这个以外,还有一个东西是PhantomJS

PhantomJS is a headless WebKit with JavaScript API. It has fast and native support for various web standards: DOM handling, CSS selector, JSON, Canvas, and SVG.

它本生就能用来做Screen Capture

使用phantomjs存在两个问题,一是它需要服务器的支持,而是经我测试中文有问题(我是用它提供的DEMO来测试的,没有自己装环境试),而我们想做的事在浏览器上实现截图,这些方案都和预先想的有所偏离,关于截屏这个问题也就搁置了一段时间。

前几天装了个花瓣的插件,发现它可以网页里面实现截屏,研究了一下他压缩过的代码,注意到了其中使用到了Chrome扩展开发中使用的方法参与截屏(它实际截屏的代码没找到)。

然后又在Chrome扩展开发页面上找到了一个实现页面截屏的实例screenshot,其中最关键的方法就是captureVisibleTab,captureVisibleTab的用法如下:

chrome.tabs.captureVisibleTab(null, function(img) {
    // callback of captureVisibleTab,img a string start with data://
    var my_img = new Image();
    my_img.onload = function(){
        // execute after the img was loaded
    };
    my_img.src = img;
});

上面的代码中my_img把captureVisibleTab获得的数据作为自己的src,但是captureVisibleTab只能截取当前可见区域的图像。没法完成整页截图,所以我们不得不拼图。我们血要在截取一块可视区域以后滚动滚动条到下一块可视区域再截图,如此反复。于是我使用了如下流程进行操作:

  1. 截取第一块
  2. background发送消息到内容页面,通知滚动,滚动完成回调scrollPageDone
  3. 滚动完成调用scrollPageDone,其中调用截屏
  4. 截屏完毕继续滚动,反复

上述流程有一个问题,就是滚动页面是需要时间的,为了解决这个问题,我在scrollPageDone中使用setTimeout 500ms之后再调用截屏函数。现在我们已经顺利的获取了整页的很多小块。是时候把他们拼成完整的页面截图了。我的思路是把这些小块绘制到一块canvas上,然后把canvas.getDataUrl()获取的值设置为img.src,如此图像即可拼装出来。把此图像另存为即可得到截图。下面是拼接图片的一段代码:

my_img.onload = function() {
    var ctx = canvas.getContext("2d");
    ctx.drawImage(blockImg, 0, 0, width, height, 0, Capturer.yPos, width, height);
    Capturer.yPos += Capturer.clientHeight;
    self.scrollPage(self.tabId, 0, Capturer.clientHeight);
};

其中的yPos用来记录图像从上到下已经拼接了多长,以便接着上次拼完的地方继续拼接。这里最关键的方法应为:

ctx.drawImage(my_img, 0, 0, width, height,
, Capturer.yPos, width, height);

其方法说明为:

drawImage(image, sourceX, sourceY, sourceWidth, sourceHeight,
    destX, destY, destWidth, destHeight)

上面所述基本说明了用chrome扩展实现截屏的基本原理,剩下的就是如何滚动,拼接图像如何处理边界块的问题了。我的代码在https://github.com/erichua23/prj/tree/master/screenshot

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Chrome插件 jsp源码是指在Chrome浏览器使用jsp语言编写的插件源代码。 JSP是JavaServer Pages的缩写,是一种基于Java的服务器端技术。使用JSP可以将Java代码嵌入到HTML页面实现动态生成网页内容的功能。 当我们需要在Chrome浏览器添加新的功能或扩展现有功能时,可以使用Chrome插件Chrome插件是一种用于增强浏览器功能的软件模块。通过编写插件,可以在浏览器添加自定义的功能,如增加菜单选项、改变页面样式、截取网络请求等等。 在编写Chrome插件时,可以使用多种编程语言,包括JavaScript、HTML、CSS等。如果我们希望在插件使用Java语言编写的服务器端代码,可以选择使用JSP。 具体来说,使用jsp语言编写Chrome插件源码可以让我们在插件利用Java的强大功能,比如处理复杂逻辑、操作数据库、实现用户认证等。同时,通过嵌入Java代码到HTML页面,我们可以更加灵活地生成插件的展示内容。 总之,Chrome插件 jsp源码是一种在Chrome浏览器使用jsp语言编写的插件源代码,通过编写插件源码,我们可以为浏览器增加自定义的功能和特性。 ### 回答2: Chrome插件JSP源码是指用JSP语言编写的用于Chrome浏览器的扩展程序代码。JSP是Java服务器页面的缩写,它是一种用于开发服务器端网页的Java技术。Chrome插件则是用于增强Chrome浏览器功能的小程序。 JSP源码通常用于开发Chrome插件的后端部分,它用于处理插件的逻辑处理和数据操作。JSP源码包含了服务器端脚本代码,可以通过JSP标签和Java代码实现与用户的交互,包括接收用户的请求、处理请求和返回响应等功能。 JSP源码一般包括以下的几个方面内容:界面展示部分,即插件的前端页面设计;逻辑处理部分,如用户点击按钮时的事件响应;数据交互部分,包括与服务器进行数据交互的代码;和插件设置部分,如插件的配置页面和选项设置等。 开发人员可以在JSP源码根据需求添加自定义的功能和逻辑,如调用Chrome API实现浏览器的特定操作、使用AJAX技术实现异步请求和响应、添加自定义样式和脚本等。 总之,Chrome插件JSP源码是用于开发Chrome插件的后端代码,它使用JSP语言实现逻辑处理和数据交互。通过JSP源码,开发人员可以定制和扩展Chrome浏览器的功能,使用户能够享受更加个性化的浏览体验。 ### 回答3: Chrome插件JSP源码是指用JSP(Java Server Pages)语言编写的用于扩展Chrome浏览器功能的插件代码。JSP是一种基于JAVA技术开发的动态网页开发技术,它允许在HTML页面嵌入Java代码,通过与服务器的交互实现动态生成页面内容。 Chrome插件是一种用于增强和定制Chrome浏览器功能的软件,可以通过插件来修改和增加浏览器的行为,以满足用户的特定需求。Chrome插件JSP源码主要包含与插件功能相关的JSP和其他前端代码,以及后端代码用于处理与服务器的交互。这些源码通常包括插件的配置文件、前端页面的设计和布局、与服务器进行数据交互的逻辑、事件处理、响应式设计等等。 编写Chrome插件JSP源码的过程,首先要确定插件的功能需求,然后根据需求设计并编写前端页面的布局和逻辑,同时编写后端的JSP代码与服务器进行交互。在代码编写完成后,还需要对插件进行测试并进行必要的调试,以确保插件能够正常运行。 总之,Chrome插件JSP源码是用JSP语言编写的用于扩展Chrome浏览器功能的插件代码,它通过与服务器的交互来实现动态生成页面内容,从而可以实现一些定制和增强浏览器功能的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值