📌  相关文章
📜  谷歌浏览器扩展内容脚本匹配 - TypeScript (1)

📅  最后修改于: 2023-12-03 14:57:46.081000             🧑  作者: Mango

谷歌浏览器扩展内容脚本匹配 - TypeScript

简介

谷歌浏览器扩展是谷歌浏览器的一个功能,它允许用户通过添加扩展程序来增强浏览器的功能。其中,内容脚本是一种可以在浏览器中嵌入到特定网页中的脚本,相当于给网站添加功能的“小程序”。 而 TypeScript 则是一种由微软开发的JavaScript超集,它添加了可选的类型注释,以及一些最新的ECMAScript特性支持,使得在大型项目中使用JavaScript更加容易。

内容脚本匹配

在扩展程序中使用内容脚本时,需要匹配特定的网页,以便脚本能够在这些网页上运行。 谷歌浏览器扩展提供了一个匹配模式,可以用来指定哪些网页应该加载内容脚本。匹配模式支持通配符和正则表达式。

匹配模式语法

匹配模式规定了要匹配的网页的URL。匹配模式可以使用通配符来表示URL中不确定的部分,例如星号*表示零个或多个字符,问号?表示一个字符。而正则表达式则可以更加灵活的匹配URL,但语法相对比较复杂。

以下是匹配模式的语法示例:

// 匹配所有HTTPS协议的网页
https://*/*

// 匹配所有百度搜索的页面
http://www.baidu.com/s*

// 匹配所有foo.com域名下的页面
http://foo.com/*

// 匹配www.example.com下的所有子域名
http://*.example.com/*

// 使用正则表达式匹配所有以'.com'结尾的网页
/^https?:\/\/.*\.com$/
TypeScript中使用匹配模式

为了正确的使用匹配模式,我们需要在TypeScript中定义一个matches数组来存储匹配模式。同时推荐使用chrome.runtime.getURL() 来获取扩展程序中文件的URL路径。

下面是一个基本的示例:

// 定义匹配模式数组
const matches = [
  'https://*/*',
  'http://www.baidu.com/s*',
  'http://foo.com/*',
  'http://*.example.com/*',
  /^https?:\/\/.*\.com$/
];

// 注册内容脚本
chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
  if (changeInfo.status === 'complete' && tab.active) {
    matches.forEach(match => {
      if (tab.url && tab.url.match(match)) {
        chrome.tabs.executeScript(tabId, { file: 'content.js' });
      }
    });
  }
});
总结

使用谷歌浏览器扩展可以为网页带来更加灵活的功能,而内容脚本匹配则是决定脚本在哪些网页上运行的关键。同时,使用TypeScript可以提高项目的可维护性和扩展性。