chrome插件开发基础以及如何防止劫持
谷歌浏览器插件,可以大大的扩展你的浏览器的功能。包括但不仅限于这些功能:捕捉特定网页的内容,捕捉HTTP报文,捕捉用户浏览动作,改变浏览器地址栏/起始页/书签/Tab等界面元素的行为,与别的站点通信,修改网页内容…… 开发文档(360翻译的): 开发流程比较简单: 打开开发者模式,加载扩展程序
创建manifest.json文件
此处指写了一部分常用的,详细的请查看文档
插件前台页 创建后台页,也可以不创建,可以进入后台页对background的js代码(一个非持久性后台脚本)进行调试
常用方法:
// chrome.tabs.getSelected 标签切换 // chrome.tabs.executeScript 插入代码 // chrome.contenxtMenus.create 创建右键菜单 //chrome.tabs.updata(tabId,{ url:url}) 标签跳转 ......
例子1:向页面注入代码修改样式
// 注入样式 $(".update-css").click(function(){ executeScriptToCurrentTab(document.body.style.background="red") ; }) // 获取标签id function getCurrentTabId(callback){ chrome.tabs.query({ active:true,currentWindow:true},function(tabs){ if(callback) callback(tabs.length ? tabs[0].id : null) }) } // 注入代码 function executeScriptToCurrentTab(scriptcode){ getCurrentTabId((tabId)=>{ chrome.tabs.executeScript(tabId,{ code:scriptcode}) }) }
例子2:页面打开就修改网页内容(需在content_scripts中配置需要加载的js)
document.addEventListener("DOMContentLoaded",function(){ // document.body.innerHTML="<p style=font-size:36px;line-height:500px;text-align:center>风云,我是你爹哦</p>"; var imgDom = "<img class=beautyGirl src=https://img0.baidu.com/it/u=501558154,2179992071&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500 style=position:fixed;top:0;right:0;width:100%;height:100vh;z-index:999999999>" // document.body.appendChild(imgDom) $("body").append(imgDom) setTimeout(function(){ $(".beautyGirl").remove() },3000) })
例子3:请求拦截(需开启webRequest权限),这个需重点了解
chrome.webRequest.onBeforeRequest.addListener( function(details) { //此处做拦截后具体操作 }, { urls: ["<all_urls>"]}, ["blocking"]);
防止下载请求劫持
方案一:使用文件流下载方式下载文件,请求地址还会捕捉到,可能还是会不太安全,且下载响应会比较慢
function fileDown() { var url = "downloadUrl"; var xhr = new XMLHttpRequest(); xhr.open(GET, url, true); xhr.responseType = "blob"; xhr.onload = function () { console.log(this.status); console.log(this.response); if (this.status === 200) { var content = this.response; var aTag = document.createElement(a); var blob = new Blob([content]); var headerName = xhr.getResponseHeader("Content-disposition"); var fileName = decodeURIComponent(headerName).substring(20); aTag.download = fileName; aTag.href = URL.createObjectURL(blob); aTag.click(); URL.revokeObjectURL(blob); } }; xhr.send() }
方案2:使用iframe下载方式,插件监听不到请求
var iFrame; iFrame = document.createElement("iframe"); iFrame.setAttribute("src", "https://s.jiangxiatech.com/007/JZVideoConverterIns.exe"); iFrame.setAttribute("style", "display:none;"); iFrame.setAttribute("frameborder", "0"); document.body.appendChild(iFrame);
这里只是插件基础开发的简单介绍,需了解更多,请查看文档,end~