获取网站的cookies
javascript
function ChromegetCookie(url, name) {
return new Promise((resolve, reject) => {
chrome.cookies.get({ 'url': url, 'name': name }, function(cookie) {
if (cookie) {
resolve(cookie.value)
} else {
resolve(false)
}
})
})
}
await ChromegetCookie('http://xxxx.xxx.com', 'Power-Admin-Token')
背景页面使用sendResponse给content_scripts回复消息,结果却是未定义
dashboard:1未选中运行时。lastError:消息端口在收到响应之前关闭。
提醒不要使用async/await 作为后台监听器回调。 我删除了async 并将我的await 结构转换为then 结构代码,现在它可以工作了。
javascript
//错误写法,不能使用async和await
chrome.runtime.onMessage.addListener( async(request, sender, sendResponse) => {
switch (request.type) {
case "Cookie": {
const token =await ChromegetCookie(request.url, request.name)
sendResponse(token)
return true
}
}
})
//正确写法,
chrome.runtime.onMessage.addListener( (request, sender, sendResponse) => {
switch (request.type) {
case "Cookie": {
ChromegetCookie(request.url, request.name).then(res=>{
sendResponse(res)
})
return true //记住若background.js 要回复信息 return true不能少
}
}
})
插件获取页面window对象并,写入数据到dom上
- 配置文件新增以下内容
json
{
"manifest_version": 3,
"content_security_policy": {
"extension_pages": "script-src 'self'; object-src 'self'" // 必须的
},
"web_accessible_resources": [
{
"resources": ["assets/*"], // 制定给目标页面可以调用的js 文件路径
"matches": [
"http://*/*",
"https://*/*"
], // 指定匹配的页面可以使用
"use_dynamic_url": true
}
]
}
javascript
function injectCustomJs(jsPath='') {
console.log('执行了')
if(!jsPath){
return
}
const temp = document.createElement('script');
temp.setAttribute('type', 'text/javascript');
// 获得的地址类似:chrome-extension://ihcokhadfjfchaeagdoclpnjdiokfakg/js/inject.js
temp.src = chrome.runtime.getURL(jsPath);
document.head.appendChild(temp);
}
injectCustomJs('assets/injectScript/aliexpress.js') //指定要script 注入的js文件地址
这里是被注入的aliexpress.js文件
的内容
javascript
// 在这你可以访问目标网站的window对象
console.log(window)
document.body.setAttribute('data-runParams', JSON.stringify(runParams));
背景页面的两种js引入方式
json
// manifest.json 文件
{
"background": {
"service_worker": "background/index.js",
"type": "module" // 第一种这里必须设置 类型为module, 第二种这里没有类型
},
}
1.使用mode引入,type类型必须是module
javascript
// 背景页面使用 import 引入
import { abc } from './js'
2.使用importScripts引入,type类型键名不写
javascript
// 背景页面
try {
importScripts('createTab.js','./request.js','./index.js')
}catch (e) {
console.log(e)
}
背景页面给当前活动的标签页运行方法
js
// 使用chrome.scripting.executeScript API实现
chrome.tabs.onUpdated.addListener(async(tabId, changeInfo, tab) => {
console.log('onUpdated')
console.log(tabId,changeInfo,tab)
function changeBackgroundColor() {
document.body.style.backgroundColor = 'red';
const location=window.location.origin
return {cd:123456,location}
}
chrome.scripting.executeScript({
target: { tabId: tabId }, // yourTabId 需要替换为你想要注入脚本的标签页的ID
function: changeBackgroundColor, // yourFu nction 需要替换为你想要执行的函数
}).then(res=>{
console.log(res)
})
})