用chrome插件下载文件,并自定义文件名
来源:互联网 发布:九天封神炼体升阶数据 编辑:程序博客网 时间:2024/06/09 19:53
要修改下载过来的文件名?这需求挺奇葩,但做为开发,一定要想办法把完成这样的下需要。
第一步,看chrome插件开发流程,一个manifest文件指定一个html文件,就可以完成hello world的制作。
一般的插件都会把脚本放到宿主页面上,通过宿主上去的脚本和插件里的脚本进行消息交互,如此可以把宿主页面上的dom节点和相关信息通过消息传递传递到插件脚本。
需求方给了我一个download master的插件,他的功能都是完整的,只是下载过来的文件名是服务器里用content-disposition指定了文件名的文件。
想了四个办法来完成修改文件名。
1.如果下载的文件是网页上的静态文件,如图片,html,css等资源文件,可以生成一个a标签,把href赋值成资源的url,同时给a标签的download属性赋值要下载后的文件名, 再用一个鼠标模拟点击的方法,自动下载上面的这些资源,下面的这段脚本是放到宿主上去的脚本里,通过消息传递触发
function downloadResource(url){var link = document.createElement('a');a.href= url;a.download = "xxxxx.xxxx";var event = document.createEvent("MouseEvents"); event.initMouseEvent("click", true, false); link.dispatchEvent(event);}
2.用chrome插件的chrome.downloads.download方法,这个方法是要用chrome的开发版本,于是马上安装开发版,并在flag里把实验扩展接口开启,用到上面的这个方法是看到api说明里有filename的项可供修改,事实证明,这个filename项和效果的第一种方法的效果是一样的,对于服务器指定了content-disposition的header属性的文件不起作用。不起作用的方法也不多说了,都是无用功。
chrome.downloads.download({url: torrentsLinks[i],filename:'1.torrent'},function(id) {});3.通过上面的几种尝试,已经知道服务器指定了的content-disposition让我改不了文件名,想办法在responseHeader里把这个属性改掉,终于在chrome插件api里找到了可以修改的方法chrome.webRequest.onHeadersReceived,这个对象可以在服务器的header接收完成触发,突破口已经找到了,可这个方法怎么写呢,先看一源码
chrome.webRequest.onHeadersReceived.addListener(function(details){var headers = details.responseHeaders,blockingResponse = {};for( var i = 0, l = headers.length; i < l; ++i ) { if( (headers[i].name.toLowerCase() == 'content-disposition') ) {headers[i].value = 'attachment; filename=\"xxxx.xxxx\"';break; }}blockingResponse.responseHeaders = headers;return {responseHeaders: headers}},{urls: ["http://jpopsuki.eu/*","https://what.cd/*"]},["responseHeaders","blocking"]);
addListener有三个参数,第一个是回调函数,第二个是过滤的urls,就是只有这些url才进行监听,第三个参数是一定要有blocking字符串,要是没有这个字符串,回调函数只要调用一下,不等回调函数返回已经把responseHeader拿去下载了,而第三个参数responseHeaders是只对responseHeaders进行监听,如此完成了一个下载文件名的修改需求。
上面的的开发过程中找到一个chromeHidden.internalApis.downloads.onDeterminingFilename从api的说明上来看是可以支持文件名的修改的,可是在实际调用过程中抛出了错误,找不到internalApis对象,在chrome上记了一个bug,不知道会不会引起chrome的注意。
- 用chrome插件下载文件,并自定义文件名
- Chrome下载文件,文件名出现乱码解决
- 下载文件chrome和火狐文件名乱码
- 用LR录制文件下载并随机产生文件名
- 下载文件,ie,chrome,firfox下处理文件名显示乱码
- Java实现文件下载并解决中文文件名乱码
- Java实现文件下载并解决中文文件名乱码
- PHP强制下载文件,并输出文件名与文件大小信息
- 上传下载文件(并处理了下载文件名乱码问题)
- 如何下载chrome插件
- chrome视频下载插件
- chrome插件下载地址
- chrome vpn插件下载
- 下载chrome插件和离线安装CRX文件的方法
- 下载chrome插件和离线安装CRX文件的方法
- chrome拓展插件下载CRX文件|查看源代码
- 下载chrome插件和离线安装CRX文件的方法
- 下载Chrome浏览器crx文件插件最简单方法
- SQL*Plus 的 Copy 命令
- SecureCRT 的配置记录
- 手机毒霸去广告功能分析二:广告View的识别
- Django添加数据库字段
- 浅谈C++析构函数
- 用chrome插件下载文件,并自定义文件名
- SQL 时间类型与字符串类型相互转换
- linux 命令之简写
- Linux distros 源更新
- 创建型-单例
- 1405_Tanning Salon
- VRML---第三章第三部分(原型定义和调用)
- C#下简答的加密算法
- FFMPEG SDK 开发介绍