NiceLeeのBlog 用爱发电 bilibili~

前端 FireFox扩展插件实践 - 网页视频下载器

2019-01-18
nIceLee

阅读:


浏览器扩展是个很好用的东西,像Chrome好用的插件就特别多。可惜找了半天手机端支持的只有火狐,因为都是使用的统一的WebExtensions API,转Chrome也不太费事,尝试着做了一下。

前言与分析

现在要做一个网页视频提取下载功能的插件。因为有时候网页并不是一访问完毕就加载好视频,可能还需要用户的一些操作什么的,故而提取视频链接这个动作最好由用户来完成,也就是点击一下插件的按钮。
那么,可以想见,现在需要做的大概有以下几件事情:

  • 监听插件按钮,有点击就给脚本发信号
  • 脚本收到信号,提取视频链接,因为有的链接默认下载器处理不了,故而还有添加到剪贴板这一操作

监听按钮

background.js监听到按钮点击后,发送信号给当前活动页面

function sendSig(tabs) {
	browser.tabs.sendMessage(tabs[0].id, {
		command : "printVideoInfo",
	});
}
function onClickBtn() {
	browser.tabs.query({
		active : true,
		currentWindow : true
	}).then(sendSig);
}
browser.browserAction.onClicked.addListener(onClickBtn);

提取视频

printVideo.js收到请求后,提取视频链接并下载

function printVideoInfo(){
    var video = document.getElementsByTagName("video");
    var urlLink;
    for(var i=0; i<video.length; i++){
        urlLink = video[i].getAttribute("src");
        if( urlLink == null){
            try{
                urlLink = video[i].getElementsByTagName("source")[0].getAttribute("src");
            }catch(err){}
            
        }
        if( urlLink != null){
            urlLink = toAbsURL(urlLink);
            console.log(urlLink);
            copyToClipboard(urlLink);
            downloadFile(urlLink);
            break;
        }
    }
    
    if( urlLink == null){
        alert("There is no video catched!");
    }
}
browser.runtime.onMessage.addListener((message) => {
    if (message.command === "printVideoInfo") {
      printVideoInfo();
    };
});

相关链接


相似文章

内容
隐藏