浏览器插件实现复制并粘贴cookie、localStorage、sessionStorage信息功能

浏览器插件实现cookie、localStorage、sessionStorage信息复制粘贴功能

背景

在日常开发中,我们总是会先在本地环境进行开发调试代码,但在开发过程中又依赖测试环境的一些数据配置信息,因此我们会通过各种方式将本地环境获取测试环境的信息配置,例如配置域名代理,或者将测试环境的数据作为mock数据供本地调用,又或者将测试环境的用户登录信息cookie复制到本地。本章讲述开发一个将cookie信息快速复制、粘贴小功能的浏览器插件。

插件功能概述

  1. 复制功能
    • 从当前页面获取cookiesessionStoragelocalStorage数据。
    • 用户可以选择哪些信息(如:cookiesessionStoragelocalStorage)需要复制。
  2. 粘贴功能
    • 将选中的信息粘贴到目标页面
    • 目标页面可以是当前打开的页面或一个新的tab页

插件结构

  1. 插件结构如下
  • manifest.json:插件的元数据和权限配置。
  • contentScript.js:内容脚本,处理页面信息的复制与粘贴。
  • popup.html:插件的用户界面,用于选择复制和粘贴的内容。
  • popup.js:插件界面逻辑,处理用户操作。
  • icon.png:插件的图标文件。

话不多说,直接上代码

manifest.json

插件的manifest.json文件配置了插件的基本信息和权限

{
   
   
    "manifest_version": 3,
    "name": "Copy Cookie & Storage",
    "version": "0.0.1",
    "description": "实现cookie、sessionStorage、localStorage信息复制与粘贴功能的插件",
    "permissions": ["cookies", "activeTab", "sessions"],
    "host_permissions": [
        "*://*/*"
    ],
    "content_scripts": [
      {
   
   
        "matches": ["<all_urls>"],
        "js": ["contentScript.js"]
      }
    ],
    "action": {
   
   
        "default_popup": "popup.html",
        "default_icon": {
   
   
            "16": "/icon.png",
            "32": "/icon.png",
            "48": "/icon.png",
            "128": "/icon.png"
        }
    },
    "icons": {
   
   
        "16": "/icon.png",
        "32": "/icon.png",
        "48": "/icon.png",
        "128": "/icon.png"
    },
    "author": "milk"
}

contentScript.js

contentScript.js文件负责从当前页面提取信息,并将信息粘贴到目标页面。

// content_script.js

// 监听请求获取当前 tab 的 cookies
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
   
   
    // 可以在这里对消息进行处理
    if (message.name === "from_pupop_get_storages") {
   
   
        
        const allLocalStorage = {
   
   };
        for (let i = 0; i < localStorage.length; i++) {
   
   
            const key = localStorage.key(i);
            const value = localStorage.getItem(key);
            allLocalStorage[key] = value;
        }

        // 获取所有sessionStorage键值对
        const allSessionStorage = {
   
   };
        for (let i = 0; i < sessionStorage.length; i++) {
   
   
            const key = sessionStorage.key(i);
            const value = sessionStorage.getItem(key);
            allSessionStorage[key] = value;
        }

        sendResponse({
   
   
            local: allLocalStorage,
            session: allSessionStorage,
        })
    }

    if (message.name === "from_pupop_send_local_storage") {
   
   
        for (const key in message.value) {
   
   
            if (Object.hasOwnProperty.call(message.value, key)) {
   
   
                const element = message.value[key];
                localStorage.setItem(key, element)
            }
        }
    }

    if (message.name === "from_pupop_send_session_storage") {
   
   
        for (const key in message.value) {
   
   
            if (Object.hasOwnProperty.call(message.value, key)) {
   
   
                const element = message.value[key];
                sessionStorage.setItem(key, element)
            }
        }
    }

    if (message.name === "from_pupop_clear_storages") {
   
   
        if (message.value.includes('sessionStorage')) {
   
   
            sessionStorage.clear();
        }
        if (message.value.includes('localStorage')) {
   
   
            localStorage.clear();
        }
    }

    // 如果需要,可以向popup.js发送回复消息
    // sendResponse({ received: true });
});

popup.html

这是插件的用户界面,允许用户选择要复制的信息,并粘贴到目标页面

<!DOCTYPE html>
<html lang="en-US">
    <head>
        <meta charset="UTF-8">
        <style>
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值