美文网首页
浏览器插件开发相关

浏览器插件开发相关

作者: 湘兰沅芷 | 来源:发表于2024-05-16 15:32 被阅读0次

1.新建chrome1文件夹,创建manifest.json

{
  "name": "Hello world",
  "description": "show 'hello world'!",
  "version": "1.0",
  "manifest_version": 3,
  "action": {
    "default_popup": "popup.html"
  }
}

action 配置,是chrome1的扩展程序中最重要的配置。如果不添加action,那么chrome1的扩展程序将不能点击,放到插件上无任何反应。

给manifest.json添加 action 配置default_popup,这样点击icon的时候,会打开一个popup页,并显示hello world 创建一个popup.html,内容为:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>显示出hello world</title>
    <link rel="stylesheet" type="text/css" href="popup.css">
</head>

<body>
    <h1>显示出hello world</h1>
    <button id="clickBtn">点击按钮</button>
    <script src="popup.js"></script>
</body>

</html>

给popup页面设置js脚本、css样式
popup.js

console.log(document.getElementById('clickBtn'));
document.getElementById('clickBtn').addEventListener('click', function () {
  console.log('clicked');
});

popup.css

h1 {
    background-color: antiquewhite;
    font-weight: 100;
}

将 chrome1 安装到谷歌浏览器
安装方式是,直接将chrome1文件夹添加到到谷歌浏览器的扩展程序中,在扩展程序中打开开发者模式,然后加载已解压缩的扩展程序。

点击该插件,会打开一个popup页面,显示hello world,
https://gitee.com/shenshuai89/learn-chrome-extension/tree/master

设置更改content 页面

"content_scripts": [
    {
      "js": [ "content.js"],
      "css":[ "content.css" ],
      "matches": ["<all_urls>"]
    }
  ]

content.js 内容如下:

console.log('content.js hello everybody!');

let newDiv = document.createElement('div');
newDiv.innerHTML = 'hello everybody!';
newDiv.id = 'newDiv';
document.body.appendChild(newDiv);

content.css 内容如下:

#newDiv {
  font-size: 36px;
  color: burlywood;
  position: absolute;
  top: 20px;
  width: 100%;
  text-align: center;
  z-index: 9999;
}

这样就可以动态修改用户打开的页面了。

再使用拓展程序的 API 时,大多数的时候,需要在 manifest.json 文件中声明 permissions 字段。
Chrome 浏览器插件 Manifest.json V3 中权限(Permissions)字段解析:
"permissions":["tabs", "storage", "activeTab", "idle"],
https://blog.csdn.net/guoqiankunmiss/article/details/135597089

消息传递
popup:
chrome.tabs.sendMessage
chrome.runtime.onMessage
content:
chrome.runtime.sendMessage
chrome.runtime.onMessage
background: _ chrome.tabs.sendMessage _ chrome.tabs.onMessage

  "background": {
    "service_worker": "background.js"
  },
// 这是一个在后台执行的文件,多个tab会共享此文件
// 这个文件会随着插件安装执行一次
// 在该文件内存储的数据,会被多tab页面共享
// 在v3版本中,只有js脚本,没有对应的html页面
// 由于此文件在后台执行,为了测试需要,将数据通过消息发送出去
let namespaced = 'BACKGROUND HELLO~~~~';

// 在插件安装完成之后,执行这样一个代码。相当于插件内部就存储了一个颜色。
chrome.runtime.onInstalled.addListener(async () => {
  console.log('background js');
  // 1. Create a new tab
  // chrome.tabs.create(
  //   {
  //     url: chrome.runtime.getURL('newPage.html'),
  //   }
  // );

  // 2. 查询所有tab
  const tabs = await chrome.tabs.query({
    url: [
      'https://blog.csdn.net/*',
      'https://juejin.cn/post/*',
    ],
  });
  // console.log(tabs)
  tabs &&
    tabs.forEach((tab) => {
      // console.log(tab, 'background js tab');
    });

  // 3. 接收到content的消息后,通过 sendResponse将namespaced数据发送出去
  chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
    //  A page requested user data, respond with a copy of `user`
    if (message === 'get-user-data') {
      sendResponse(namespaced);
    }
  });

  // XXX. service worker 通过 chrome.tabs.sendMessage 发送消息,一直未成功 XXX
  /* (async () => {
    // 查询当前tab
    const [tab] = await chrome.tabs.query({
      active: true,
      lastFocusedWindow: true,
    });
    // 和当前tab进行通信
    chrome.tabs.sendMessage(
      tab.id,
      {
        greeting: 'hello',
      },
      function (response) {
        console.log('background 发送消息', response, tab.id);
        // do something with response here, not outside the function
        console.log(response, 'background js: ');
      }
    );
  })(); */

  // 可以设置数据到storage中, 可以将数据设置storage中进行传递
  chrome.storage.sync.set({ namespaced: 'run background js storage' });
});
  "options_ui": {
    "page": "options.html"
  }

相关文章

  • 软件推荐

    浏览器 Chrome 镜像 浏览器相关插件 IDE Sublime Text 3 及相关插件 代码版本控制 Git...

  • Android程序员日常学习:Android NDK环境搭建之起

    ADT插件:管理Android SDK和相关的开发工具的NDK插件:用于开发Android NDK的插件,ADT版...

  • Android NDK 环境搭建 之 起始篇NDK HelloW

    ADT插件:管理Android SDK和相关的开发工具的NDK插件:用于开发Android NDK的插件,ADT版...

  • 图片插入

    1.多媒体及相关插件介绍:插件:就是其他软件,只是挂接到浏览器中插件的兼容性其实很不好,但flash对各浏览器来说...

  • 5分钟教会你开发浏览器插件

    写在前面 做web开发的同学,经常会用到各种chrome浏览器插件,那么我们寄几怎么开发一个插件呢(其实是浏览器扩...

  • 前端开发 - 谷歌浏览器相关拓展插件

    前端开发相关拓展插件 1. WEB前端助手(FeHelper) FeHelper简直就是前端开发人员的神器,它是由...

  • 01_html

    web开发工具 fireBug:火狐浏览器的调试插件 浏览器:IE浏览器,chrome,火狐 HBuilder:w...

  • 好用的谷歌浏览器插件

    以下是个人开发常用的谷歌浏览器插件,分享给大家

  • eclipse 插件开发相关

    话说呀,eclipse的文档很不够用呀,写的简直是一个不容易理解,可能作者觉得显而易见的东西,到我这里就完全看不懂...

  • 笔记2

    一、多媒体及相关插件介绍 是承载插件的标签。浏览器的视频都是flash插件来呈现的。 多媒体元素有:img,map...

网友评论

      本文标题:浏览器插件开发相关

      本文链接:https://www.haomeiwen.com/subject/acwbfjtx.html