Skip to content
本页目录

获取网站的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)
  })
})