- 创建SQL表,存储的code、access_token、user_id、expired_time,code 是网页端生成的一个UUID,access_token 是当前网页登录用户session,插件和网页共享一个token,这样可以保证网页退出后,插件端的access_token 也同步失效,放置 token 泄露。
- content script 使用
document.createElement("script")在网页端注入代码,
注入的代码与 content script 通过 window.postMessage 通信传递code
- 网页端刷新下token,防止插件刚登录上,token时效了,然后生成一个UUID code 存储到数据库,再将code 传给 content script
- content script 与 service worker 通过 chrome.runtime.sendMessage 通信传递code 然后请求接口。
网页端 和 content script 什么区别
- 运行环境隔离
- DOM 是共享的
- JS 执行环境是隔离的(变量互不干扰)
- 为什么要隔离?
- 防止插件代码污染网页代码,或者网页恶意代码窃取插件内部的数据(例如 chrome.runtime 对象)。
- Chrome 扩展安全模型要求这样做
- 通信
- 只能通过 window.postMessage 通信