谷歌插件Image downloader开发之popup

Image downloader的交互逻辑是这样的:用户点击Image downloader的图标,会向页面(content script,见上一篇文章:谷歌插件Image downloader开发之 content script)发送收集图片事件,页面收集完图片后,将对应的图片地址数组发送给popup页处理。popup页就是点击谷歌插件图标所弹出来的页面。Image downloader的popup页是长成这样的:

图片描述

popup页包含的功能

popup页采用了vue1.0来做数据绑定,主要包含了以下功能:

1、显示原始图片大小
2、根据图片大小筛选图片
3、设置是否显示img标签的图片、是否显示背景图片,是否显示自定义属性的图片
4、根据自定义属性规则,收集所配置的自定义属性的值
5、下载图片

popup与content script的交互

图片容器:

imgs: { // 图片容器
    attrImg: [], // 属性图
    bgImg: [], // 背景图
    img: [], // img标签图
},
/**
 * 向tab发送收集图片信息,接收tab返回的图片url列表
 * @param action {string} 值为'all'或'attr',如果为all,则收集所有图片,为attr则只收集属性图
 * @param attr {string} 用;分隔开的属性规则
 */
sendMessage(action, attr) {
    chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
        chrome.tabs.sendMessage(tabs[0].id, { action, attr }, (response) => {
            if (action === 'all') {
                const attrImg = response.attrImg
                const bgImg = response.bgImg
                const img = response.img
                    // 重置容器
                this.resetImgContainer('attrImg')
                this.resetImgContainer('bgImg')
                this.resetImgContainer('img')
                    // 获取图片的宽高
                this.mapImg(this.imgs.attrImg, attrImg)
                this.mapImg(this.imgs.bgImg, bgImg)
                this.mapImg(this.imgs.img, img)
            } else {
                this.resetImgContainer('attrImg')
                this.mapImg(this.imgs.attrImg, response.attrImg)
            }
        });
    });
},

popup页用了chrome的tabs的api,query查询当前页签,并用sendMessage向页签发送action和配置的属性值,如果action为'all'则是收集所有图片,如果为'attr',则只收集所配置的属性图片,resetImgContainer方法只是简单地将容器置空,response是content script所返回的结果,mapImg方法用来获取图片的长和宽,下文会讲到。

而在content script中,则用onMessage来接收popup的信息,并将收集到的图片数组返回给popup

// 接收popup的指令,如果action为all,则获取所有图片url,如果为attr,则获取属性图片
chrome.runtime.onMessage.addListener(({ action, attr }, sender, sendResponse) => {
    if (attr) {
        configAttr = []
        configAttr.push(...initAttr)
        configAttr.push(...attr.split(','))
    } else {
        configAttr = []
        configAttr.push(...initAttr)
    }
    if (action === 'all') {
        sendResponse({
            attrImg: [...new Set(getConfigAttrUrl())],
            bgImg: [...new Set(getBackgroundImage())],
            img: [...new Set(getImgUrl())]
        })
    }
    if (action === 'attr') {
        sendResponse({
            attrImg: [...new Set(getConfigAttrUrl())],
        })
    }
});

上篇文章发在div.io上时,@幾米 提到了图片去重的问题,所有在返回图片是,用es6的Set方法去重,这个只处理同类型图片的去重,不处理如背景图片和图片标签之间的重复图片。

获取属性图片

/**
 * 获取属性图片
 */
getAttrImg() {
    clearTimeout(this.progress)
    this.progress = setTimeout(() => {
        this.sendMessage('attr', this.attr)
    }, 500)
},

配置的属性值发生变化时,向页面发送获取属性图片事件

显示图片原始大小

/**
 * 遍历图片,设置图片的宽高属性
 * @param container {array} 容器
 * @param imgs {array} 图片url列表
 */
mapImg(container, imgs) {
    imgs.forEach((src) => {
        this.imgNatureSize(container, src)
    })
},
/**
 * 获取图片原始宽高,并将图片push进容器
 * @param container {array} 容器
 * @param src {string} 图片url
 */
imgNatureSize(container, src) {
    const size = {
        width: '',
        height: '',
    }
    let image = new Image()
    image.src = src
    image.onload = function() {
        container.push({
            src,
            width: image.width,
            height: image.height,
        })
    }
},

遍历拿到的图片,获取图片的宽和高,并将宽高属性保存起来

下载图片

/**
 * 下载图片
 */
downLoad(url) {
    chrome.downloads.download({ url }, () => {
        console.log('下载成功')
    })
}

调用谷歌插件的download方法来进行图片下载,本来想搞个批量下载的,但是没有发现谷歌插件有提供批量下载的API,如果遍历所选中的图片列表,不断调用download方法,会一下子弹出很多保存窗口,没有什么意义,就作罢了。

最后,所有文章都会同步发送到微信公众号上,欢迎关注,欢迎提意见:

bVCJ55?w=430&h=430

转载于:https://www.cnblogs.com/hefty/p/6163149.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
浏览并下载网页上的图片。 Image Downloader不出售,并且将始终是免费,开源的,并且没有广告或任何形式的跟踪算法! 您可以在此处找到源代码:https://github.com/vdsabev/image-downloader Image Downloader =================如果您需要从网页批量下载图像,使用此扩展程序,您可以:-查看页面包含的图像以及链接到的图像-按宽度,高度和URL进行过滤; 支持通配符和正则表达式-(可选)仅显示链接中的图像-通过单击图像选择要下载的图像-使用专用按钮下载或在新标签页中打开单个图像-自定义图像的显示宽度,列,边框大小和颜色-隐藏过滤器,不需要的按钮和通知按下“下载”按钮时,所有选定的图像都将保存到Chrome的默认下载目录,或者如果指定子文件夹名称,则保存到其中的目录。 警告:如果尚未设置默认的下载目录,则必须手动选择每个图像的保存位置,这可能会打开许多​​弹出窗口。 不建议您尝试一次在没有默认下载目录的情况下一次下载太多图像。 已知问题===============此扩展程序无法始终提取单击照片时打开的全分辨率图像(例如,在Facebook相册中)。 那是因为页面没有直接链接到图像,而是使用了脚本。 如果您需要那种功能,那么即使您无法大量下载图像,也可以使用诸如Hover Zoom的其他扩展。 更改日志=============== 2.4.2:-Chrome不允许访问跨域CSS规则的解决方法2.4.1:-修复了无效URL会破坏扩展名的问题- https://github.com/vdsabev/image-downloader/issues/23-将Zepto.js更新为1.2.0 2.4:-添加了在下载2.3前重命名文件的选项:-添加了对BMP,SVG和WebP图像的支持-增加了对相对URL的支持-通过搜索更少的元素提高了弹出窗口的加载速度-用chrome.runtime 2.2代替了不推荐使用的chrome.extension调用:-删除了访问标签的不必要权限-删除了由于提示而导致的捐赠提示一些用户认为它在第一次出现后并没有消失; 现在,将在首次安装时打开选项页-保存URL过滤器的值-修复某些尺寸调整问题的另一种尝试2.1:-添加了图像宽度/高度过滤器-由于某些原因,一次性重置了所有设置遇到尺寸问题的人-删除了按URL排序选项2.0:-添加了将文件保存到子文件夹的功能-利用Google Chrome下载API-实施了基于网格的更简洁设计-单击图像URL文本框现在将自动选择文本以便用户可以复制文本-修复了一些小的显示问题-添加了列数设置,删除了边框样式设置-选项页1.3中添加了捐赠按钮:-现在,样式标签中使用的图像也将包含在列表的末尾。 仅包含来自元素的内联样式属性的图像。 -新增了对数据URI的支持-若干错误修复和优化1.2:-更改了要显示在只读文本框中的图像上方的URL-将图像复选框移至顶部,并在每个图像复选框下方添加了打开和下载按钮-最初禁用了“下载”按钮和“所有”复选框-引入了一些新选项来隐藏过滤器,按钮和通知-删除了正文宽度选项; 弹出窗口的宽度现在相对于最大图像宽度选项重新调整大小-简化了设计1.1:-修复了最小和最大图像宽度的保存-在图像本身上方添加了URL以及用于切换的选项-添加了通配符过滤器模式(沿正常和正则表达式)-现在将保存所选过滤器的状态-将“按URL排序”选项移回过滤器-在选项页面中添加了“清除数据”按钮。 尽管该扩展程序尚未使用大量本地存储,但有人可能会喜欢此选项。 -重构了大量代码,尤其是本地存储1.0.13的使用:-添加了一条通知,使用户知道下载已开始-添加了一些动画并进一步完善了选项通知-修复了一些正在处理的事件处理程序多次附加1.0.12:-迁移到jQuery-为“所有”复选框实现了不确定的状态-如果未选中任何图像,则将禁用“下载”按钮-修复了带有重置选项的错误-现在用户可以选择保存重置值或只是通过重新加载页面来取消重置-就像通知1.0.11中所述:-更改了下载机制以支持Chrome v21 +-添加了“仅显示链接的图像”过滤器选项,当您只想下载页面上URL中的图像。 1.0.10:-添加了下载确认1.0.9:-图片数量现在将显示在“所有”复选框1.0.8旁:-添加了对锚定标记中的图片URL的检测; 请注意,此功能将不会检测不具有.jpg,.jpeg,.gif或.png文件扩展名的URL-它依赖于正则表达式,以避免可能向外部服务器发送1.0.7的数百个请求:-已删除当您按下“下载”时弹出的桌面通知系统,显示的文字描述应该易于控制(通过“选项”)并且不易受到干扰; 这也需要较少的扩展权限-添加了隐藏下载通知的选项; 大
将Chrome浏览器与Bulk Image Downloader(仅限Windows应用程序,必须单独安装)集成 请注意,BID不是免费软件应用程序。 只要您愿意,就可以免费使用BID试用版,但它有一些限制。 购买注册码以解锁全部功能。 BID目前的售价为$ 24.95(原价$ 39.95)。 请访问bulkimagedownloader.com了解更多信息。 批量图像下载器(BID)使得从几乎任何缩略图的网络图库中下载完整尺寸的图像变得容易。 支持最受欢迎的图像主机,例如imagevenue,imagefap,flickr和其他太多在此处列出的主机。 该扩展程序在Chrome中添加了一个按钮,可让您使用BID快速打开当前网页。 它还将BID菜单项添加到Chrome的右键单击上下文菜单中,使您可以使用BID打开当前页面,使用BID打开所选链接,或将当前页面或链接发送到BID队列管理器。 ---键盘快捷键--- Alt + Shift + C =使用BID打开当前页面Alt + Shift + Q =使用BID排队当前页面Alt + Shift + X =使用BID链接打开当前页面Link ID BID上下文菜单快捷方式现在具有单个字母快捷方式,可在打开上下文菜单后快速选择。 右键单击页面,然后按D,C =用BID打开当前页面右键单击页面,然后按D,Q =用BID使当前页面排队右键单击页面,然后按D,X =用BID Link Explorer打开当前页面右键单击链接,然后按D,D =打开具有BID的链接目标右键单击链接,然后按D,E =使具有BID的链接目标入队重要说明:此扩展程序要求安装Bulk Image Downloader Windows应用程序-从以下位置下载http://bulkimagedownloader.com 支持语言:English (United States)

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值