前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >chrome插件 manifest 2 to 3

chrome插件 manifest 2 to 3

作者头像
biaoblog.cn 个人博客
发布2022-08-11 19:34:48
发布2022-08-11 19:34:48
2.4K00
代码可运行
举报
运行总次数:0
代码可运行

改版的原因:

相当蛋疼 下面是 基于现有插件 需要做的一些改变的清单

1.background 替换成service worker:

  • 需要注意的是:不使用时终止,需要时重新启动(类似于事件页面)。
  • 无权访问 DOM。(service worker独立于页面,无法使用window对象)

2.v3 废弃了一些方法:

  • chrome.extension.sendRequest()
  • chrome.extension.onRequest
  • chrome.extension.onRequestExternal
  • chrome.extension.lastError
  • chrome.extension.getURL()
  • chrome.extension.getExtensionTabs()
  • chrome.tabs.Tab.selected
  • chrome.tabs.sendRequest()
  • chrome.tabs.getSelected()
  • chrome.tabs.getAllInWindow()
  • chrome.tabs.onSelectionChanged
  • chrome.tabs.onActiveChanged
  • chrome.tabs.onHighlightChanged

还有一些未在文档中明确声明的已失效的 API

  • chrome.extension.sendMessage()
  • chrome.extension.connect()
  • chrome.extension.onConnect
  • chrome.extension.onMessage

影响到我们的API(主要是contentScript与background通讯的部分):

  • chrome.extension.sendMessage()
  • chrome.extension.connect()
  • chrome.extension.onConnect
  • chrome.extension.onMessage

替换的方法:

  • chrome.runtime.sendMessage //发消息
  • chrome.runtime.onMessage.addListener // 接受消息

具体的代码使用:

发送消息以及接受回调返回的消息:

代码语言:javascript
代码运行次数:0
复制
//// content.js ////
// 1. Send the background a message requesting the user's data
chrome.runtime.sendMessage('get-user-data', (response) => {
  // 3. Got an asynchronous response with the data from the background
  console.log('received user data', response);
  initializeUI(response);
});

接受消息,并返回消息

代码语言:javascript
代码运行次数:0
复制
//// background.js ////

// Example of a simple user data object
const user = {
  username: 'demo-user'
};

chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
  // 2. A page requested user data, respond with a copy of `user`
  if (message === 'get-user-data') {
    sendResponse(user);
  }
});

参考文档:

https://juejin.cn/post/7000363901221093412

https://juejin.cn/post/7021072232461893639

3.比较蛋疼的v3的严格模式 禁止了之前的vue实例化写法:

具体的vue实例化写法可以参考之前的一篇文章:h5引用vue

先看看报错:

unsafe-eval:

  • ‘unsafe-inline’和‘unsafe-eval’表达式重新启用内联JavaScript和动态代码执行,这些默认情况下都是被CSP禁用的。理想情况下,通常不会希望在策略里保留这些表达式,但没有它们大多数现有的应用都会被阻断。

这个暂时还没想到比较好的解决方法,后续会更新

问题描述:https://blog.csdn.net/qq_35606400/article/details/114986532

尝试解决方案1:

代码语言:javascript
代码运行次数:0
复制
//Manifest v2
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'" 

//Manifest v3
"content_security_policy": {
 "extension_pages": "script-src 'self' 'unsafe-eval'; object-src 'self'",
}

添加unsafe-eval标实,但是插件会给我们抛错:

'content_security_policy.extension_pages': Insecure CSP value "'unsafe-eval'" in directive 'script-src'.

'content_security_policy.extension_pages':指令'script-src'中的不安全CSP值“'unsafe-eval'”。

这就很蛋疼,现在问题卡在这里,后续有进展再更新

好了 找到官方解释了,不支持了 完犊子了

4.尝试解决方法 通过webpack构建

参考文档:https://www.it1352.com/2289545.html

https://github.com/StarkShang/vite-plugin-chrome-extension

https://github.com/ALiangLiang/vue-webpack-chrome-extension-template

更新相关的构建文章:vite-plugin-chrome-extension(Vue版本)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 改版的原因:
  • 1.background 替换成service worker:
  • 2.v3 废弃了一些方法:
  • 3.比较蛋疼的v3的严格模式 禁止了之前的vue实例化写法:
  • 4.尝试解决方法 通过webpack构建
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档