跳至主要內容

ChromeExtention


插件基本组成结构与介绍
插件基本组成结构与介绍

不同JS的权限对比

JS种类可访问的APIDOM访问情况JS访问情况直接跨域
injected-script和普通JS无任何差别,不能访问任何扩展API可以可以不可以
content-script只能访问 extension、runtime等部分API可以不可以不可以
popup-js可访问绝大部分API,除了devtools系列不可直接访问不可以可以
background-js可访问绝大部分API,除了devtools系列不可直接访问不可以可以
devtools-js只能访问 devtools、extension、runtime等部分API可以访问devtools可以访问devtools不可以

组成间的通信方式

 injected-scriptcontent-scriptpopup-jsbackground-js
injected-scriptwindow.postMessage()
content-scriptwindow. postMessage()-chrome.runtime. sendMessage() chrome.runtime. connect()chrome.runtime. sendMessage() chrome.runtime. connect()
popup-js-chrome.tabs. sendMessage() chrome.tabs.connect()-chrome.extension. getBackgroundPage()
background-js-chrome.tabs. sendMessage()chrome.tabs. connect() chrome.extension. getViews()-
devtools-jschrome.devtools. inspectedWindow. eval()-chrome.runtime. sendMessage()chrome.runtime. sendMessage()

注:-表示不存在或者无意义,或者待验证。

webRequest

HTTP请求的生命周期
HTTP请求的生命周期
webRequest事件回调
webRequest事件回调

调试(背景页、注入脚本 不同)

Service Worker 调试入口
Service Worker 调试入口
Content Script 调试入口 - F12
Content Script 调试入口 - F12

参考

API - Mozilla | MDNopen in new window
从浏览器原理出发聊聊Chrome插件open in new window
Chrome Extension v3 开发指南open in new window
Chrome 插件 V3 版本 Manifest.json 中的内容脚本(Content Scripts)解析open in new window
最新版 V3 chrome 插件开发~ demo + 坑open in new window
Chrome Extension Manifest v2升v3初体验open in new window
终于实现了Chrome MV3 的网络请求更改open in new window
Chrome Extensions v3 迁移清单open in new window
迁移到 Manifest V3open in new window
Chrome 插件 V2 迁移至 V3 版本open in new window

[Chrome插件开发]监听网页请求和响应open in new window
chrome扩展程序获取responseBody的最佳方案——改写XHRopen in new window

油猴开发指南 - 油猴中文网open in new window
Extension Manifest Converter - githubopen in new window

常见问题

  1. 通信问题最多!
  2. 对于原生开发,jquery无疑是最好用的工具。
  3. content-scripts和原始页面共享DOM,但不共享JS;如要访问页面JS(例如某个JS变量),只能通过injected js来实现。
  4. V3 中 background.js 中localStorage被禁止使用(注意,只是background),所以需要有替代方案,两个:
  • indexedDB :如果是简单使用,不太建议,太重
  • chrome.storage :简单使用合适,但它有另外的问题
  1. content-scripts不能访问绝大部分chrome API,除了下面这4种:
  • chrome.extension
  • chrome.i18n
  • chrome.runtime
  • chrome.storage
  1. webRequest onCompleted 事件中 没有 responseBody,需用 chrome.devtools.network.onRequestFinished 来获取 responseBody。
上次编辑于:
贡献者: Michael-LiuQ,michael-liu021