30分钟开发一个抓取网站图片资源的浏览器插件浏览器插件,所以我也花了大约一天的时间阅读了谷歌浏览器插件开发文档,这里特总结一下经验,和一个实际案例来回顾插件开发过程和注意事项。您将学习如何快速开始浏览器插件开发。浏览器插件开发的核心概念。浏览器插件的通信机制。浏览器插件的数据存储。浏览器插件的应用场景。开发一个抓取网站图片资源的浏览器插件。正文开始前,先看一下作者总结的概览:如果你熟悉浏览器插件开发,可以直接看上一节插件开发实战。1.入门首先,我们来看一下浏览器插件的定义:浏览器插件是一种基于网络技术(如HTML、JavaScript和CSS)构建的可以自定义浏览体验的小型软件程序。它们允许用户根据个人需要或偏好自定义Chrome的功能和行为。开发一个浏览器插件,我们只需要有一个manifest.json文件即可。为了快速开发一个浏览器插件,我们需要打开浏览器开发者工具。具体步骤如下:在谷歌浏览器中输入chrome://extensions/。启用开发者模式。导入您自己的浏览器插件包。通过以上三步,我们就可以开始浏览器插件的开发之旅了。浏览器插件一般都放在浏览器地址栏的右侧。我们可以在manifest.json文件中配置插件的图标,并配置一定的规则。看我们的浏览器插件图标,如下图所示:下面详细讲解一下浏览器插件开发的核心概念。2、核心知识点浏览器插件一般涉及以下核心文件:manifest.json用于配置所有插件相关的配置(必须放在根目录下)。background.js后台脚本(后台页面),生命周期与浏览器一致,一般放置全局代码。内容脚本插件是一种将脚本注入页面的形式。我们可以通过content-scripts向页面注入js和css资源,并控制允许注入的范围。popup是点击插件图标后打开的自定义窗口,用于处理用户交互。笔者画了一张简单的图,大致展示了它们之间的关系:接下来,我们来详细了解一下以上核心知识点。(1)manifest.json谷歌官网为我们提供了一个简单的配置,如下:{"name":"MyExtension","version":"2.1","description":"GetsinformationfromGoogle.","图标”:{“128”:“icon_16.png”,“128”:“icon_32.png”,“128”:“icon_48.png”,“128”:“icon_128.png”},“背景”:{“持久”:假,“脚本”:[“background_script.js”]},“权限”:[“https://*.google.com/”,“activeTab”],“browser_action”:{“default_icon”:"icon_16.png","default_popup":"popup.html"}}各字段含义介绍如下:name浏览器插件名称,会显示在插件列表中。description浏览器插件简介,方便告诉开发者该插件的功能和功能,会显示在插件列表中。版本浏览器插件版本。icon浏览器插件图标。后台后台页面的脚本路径一般是插件目录的相对地址。Permissions允许使用浏览器API权限,如contextMenus(右键菜单)、tabs(操作标签)、webRequest(使用web请求)、storage(允许使用本地存储)、"http://*"(可以通过executeScript或insertCSS访问)。browser_action浏览器右上角的图标设置(包括弹出页面、鼠标悬停时的标题、图标等)。content_scripts需要直接注入到页面的javascript脚本中。web_accessible_resources是普通页面可以直接访问的插件资源列表。如果不设置,则不能直接访问。chrome_url_overrides覆盖浏览器的默认页面(通常用作浏览器的自定义桌面)。omn??ibox通过地址栏注册一个关键字来提供搜索建议,并且只能设置一个关键字(多用于自定义搜索屏蔽)。default_locale默认语言(如“zh_CN”)。(2)background.js后台页面主要用来提供一些全局配置,事件监听,业务转发等。几个常见的情况:定义右键菜单。//background.jsconstsystems={a:'有趣的前端',b:'掘金',c:'微信'}chrome.runtime.onInstalled.addListener(function(){//contextmenufor(letkeyofObject.keys(systems)){chrome.contextMenus.create({id:key,title:systems[key],type:'normal',contexts:['selection'],});}});//清单.json{"permissions":["contextMenus"]}有以下作用:只有带有.com后缀的页面才会激活插件。chrome.runtime.onInstalled.addListener(function(){//类似于浏览器插件图标激活时:[newchrome.declarativeContent.PageStateMatcher({pageUrl:{hostSuffix:'.com'},})],actions:[newchrome.declarativeContent.ShowPageAction()]}]);});});如下图所示,当页面地址的后缀不等于.com时,插件图标将不会被激活:与content_script或弹出页面的消息通信。chrome.runtime.onMessage.addListener(function(request,sender,sendResponse){console.log(sender.tab?"来自内容脚本:"+sender.tab.url:"来自扩展");if(request.greeting=="hello")sendResponse({farewell:"goodbye"});});(3)content-scriptscontentscripts一般植入到页面中,可以控制页面中的dom。我们可以用它来屏蔽网页广告,自定义页面皮肤等。manifest.json中的基本配置如下:{"content_scripts":[{"matches":["http://*/*","https://*/*"],"js":["lib/jquery3.4.min.js","content_script.js"],"css":["base.css"]}],}中上面的代码我们定义指定content_scripts允许注入的页面范围,插入页面的js和css,这样我们就可以很方便的改变某个页面的样式。比如我们可以在页面中注入一个按钮:content_scripts我会在后面的浏览器插件案例中详细介绍。(4)popuppopup是用户点击插件图标时打开的小窗口。当失去焦点时,窗口立即关闭。我们一般用它来处理一些简单的用户交互和插件指令。由于弹窗也是一个网页,所以我们一般会创建一个popup.html和popup.js来控制弹窗的显示和交互。我们在manifest.json中配置如下:{"page_action":{"default_title":"小溪图片提取插件","default_popup":"popup.html"},}这里需要注意一点,我们不能直接使用popup.html中的script脚本,我们需要导入脚本文件。如下:
