开发 Chrome 浏览器插件入门
目录
前言
一,创建插件
1.创建一个新的目录
2.编写清单文件
二,高级清单文件
1.编写放置右窗口
2.常驻的后台JS或后台页面
3.event-pages 短周期使用
三,Chrome 扩展 API 函数
1.浏览器操作函数
2.内容脚本函数
3.后台脚本函数
4.其他函数
四,Chrome 扩展 API 函数示例
1.浏览器操作函数
2.内容脚本函数
3.后台脚本函数
4.其他函数
五,manifest.json
1.必填字段
2.可选字段
3.权限
前言
简介
Chrome 插件是扩展 Chrome 浏览器的功能的软件程序。它们可以执行各种任务,例如阻止广告、增强隐私、添加新功能等等。
要开始编写 Chrome 插件,你需要掌握以下:
1.JavaScript语言
2.html
3.css
4.会使用chrome扩展开发手册
一,创建插件
1.创建一个新的目录
这个目录你可以在任何地方创建如图1,例如 我在D:\桌面\javascript\chrome下创建文件夹my-extension。
2.编写清单文件
清单文件 (manifest.json) 定义了插件的基本信息,例如其名称、版本、权限和内容脚本。
在目录中创建一个文件,进入my-extension文件夹创建一个mainfest.json文件如图2
编写miaifest.json文件输入:
{"manifest_version": 2,"name": "big Big","version": "1.1.0","description": "big测试哦","icons":{"16": "img/icon.png","48": "img/icon.png","128": "img/icon.png"},"content_scripts": [{"matches": ["https://www.baidu.com/*", "http://www.qq.com/*"],"js": ["content-script.js"]}]
}
- manifest_version: 清单文件的版本。
- name: 插件的名称。
- version: 插件的版本。
- content_scripts: 在特定网页上运行的内容脚本列表。
description :脚本描述。
icons: 图标
例如
{"manifest_version": 2,"name": "big Big","version": "1.1.0","description": "big测试哦","icons":{"16": "img/icon.png","48": "img/icon.png","128": "img/icon.png"},"content_scripts": [{"matches": ["https://www.baidu.com/*", "http://www.qq.com/*"],"js": ["content-script.js"]}]
}
设置一个清单文件的版本为:2
插件的名称:big Big
插件的版本: 1.1.0
matches: 表示在baidu。qq网页上显示特定的脚本
content-script.js: 表示js脚本
在创建一个content-script.js文件编写如图3:
我们还需要创建一个小图标文件夹img放入icon.png图片如图4,

这里我们需要导入插件了如图5
添加插件选择创建的文件夹如图6
添加成功后出现如图7代表添加成功了,
现在我开始测试,
这里这是一个测试js作用于百度,qq网页开在浏览器调试模式看到如图8插件已经编写完成了。

二,高级清单文件
1.编写放置右窗口
类似于如图9小窗口,
我们在编写一个新的manifest.json文件(你也可以把上面测试的manifest.json改以下就可以了)
{"manifest_version": 2,"name": "big Big","version": "1.1.0","description": "big测试哦","icons":{"16": "img/icon.png","48": "img/icon.png","128": "img/icon.png"},"browser_action": {"default_icon": { "16": "img/icon.png", "24": "img/icon.png", "32": "img/icon.png" },"default_title": "Big", "default_popup": "popup.html" },"content_scripts": [{"matches": ["https://www.baidu.com/*", "http://www.qq.com/*"],"js": ["content-script.js"]}]
}
//例如 都是可以的
"action": {
"default_icon": "icons/icon.png",
"default_title": "Popup Title",
"default_popup": "index.html"
}
我们在添加插件方法同上如图10显示不存在页面,
这是时候我们在创建一个popup.html文件在同目录里面如图11,
这里我只是测试以下如图12编写保存,你可以把它想象成一个网页,
这时候我刷新浏览器是可以看到如图13,可以看到它就是一个小页面,
用 browser actions 可以在chrome主工具条的地址栏右侧增加一个图标 如果你想创建一个不总是可见的图标, 可以使用page action来代替browser action default_popup当用户点击图标后出现,popup可以包含任意你想要的html内容,并且会自适应大小
2.常驻的后台JS或后台页面
Background Script 是 Chrome 扩展程序中的一种后台脚本,在扩展程序安装后立即加载,并在扩展程序的整个生命周期中一直保持活动状态。与 Event Page 不同,Background Script 不专门用于处理事件,而是可以执行各种任务,例如:
- 与服务器通信
- 管理其他脚本
- 处理定时任务
- 在后台执行计算
用途
Background Script 通常用于以下类型的任务:
- 后台处理: 执行不需要用户交互的后台任务,例如与服务器通信或处理数据。
- 跨域通信: 在不同的域之间进行通信,例如与内容脚本或来自不同域的 iframe 通信。
- 定时任务: 定期执行任务,例如检查更新或发送通知。
使用
要使用 Background Script,请在清单文件中声明它:
{"manifest_version": 2,"name": "My Extension","version": "1.0.0","background": {"scripts": ["background.js"]}
}
然后,在 background.js 文件中编写脚本逻辑:
// background.js// 与服务器通信
fetch('https://example.com/api/data').then(response => {// 处理响应
});// 定时任务
setInterval(() => {// 定期执行的任务
}, 60000);
注意:
- Background Script 在默认情况下是持久的(
persistent: true),这意味着它在扩展程序卸载之前一直保持活动状态。- Background Script 无法直接访问 DOM,因此它需要与内容脚本或其他后台脚本通信以与网页交互。
//方式一
"background":{"page": "background.html"},//方式二
"background":{"scripts": ["js/background.js"]},
如图14当我刷新后出现 ”背景页“。
3.event-pages 短周期使用
Event Page 主要用于处理以下类型的事件:
- 浏览器事件:例如
onInstalled、onUpdated和onMessage。- 自定义事件:由内容脚本或其他后台脚本触发。
优点
使用 Event Page 的优点包括:
- 事件处理集中: 所有事件处理逻辑都集中在一个脚本中,便于维护和调试。
- 持续监听: Event Page 在扩展程序的整个生命周期中保持活动状态,因此它可以随时处理事件。
- 跨域通信: Event Page 可以与内容脚本和来自不同域的 iframe 进行通信。
使用
要使用 Event Page,请在清单文件中声明它:
"background": {"persistent": false,"scripts": ["event-page.js"]}
然后,在 event-page.js 文件中编写事件处理逻辑:
// event-page.jschrome.runtime.onInstalled.addListener(() => {// 在插件安装后执行代码
});chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {// 在收到来自内容脚本或其他后台脚本的消息后执行代码
});
示例
以下是一个使用 Event Page 处理来自内容脚本消息的示例:
清单文件 (manifest.json):
{"manifest_version": 2,"name": "big Big","version": "1.1.0","description": "big测试哦","icons":{"16": "img/icon.png","48": "img/icon.png","128": "img/icon.png"},"background": {"persistent": false,"scripts": ["event-page.js"]},"browser_action": {"default_icon": { "16": "img/icon.png", "24": "img/icon.png", "32": "img/icon.png" },"default_title": "Big", "default_popup": "popup.html" },"content_scripts": [{"matches": ["https://www.baidu.com/*", "http://www.qq.com/*"],"js": ["content-script.js"]}]
}
内容脚本 (content-script.js):
// content-script.jschrome.runtime.sendMessage({message: 'Hello from content script!'}, (response) => {console.log(response.message);
});
Event Page (event-page.js):
// event-page.jschrome.runtime.onMessage.addListener((request, sender, sendResponse) => {console.log('Received message from content script:', request.message);sendResponse({message: 'Hello from event page!'});
});
重新加载插件看到如图15

注意:
- Event Page 在默认情况下是持久的(
persistent: true),这意味着它在扩展程序卸载之前一直保持活动状态。但是,对于大多数用例,将其设置为非持久(persistent: false)就足够了。- Event Page 不能直接访问 DOM,因此它需要与内容脚本或其他后台脚本通信以与网页交互。
三,Chrome 扩展 API 函数
Chrome 扩展 API 提供了各种函数,使扩展程序能够与浏览器、网页和系统交互。以下是几个常用的函数:
1.浏览器操作函数
- chrome.browserAction.onClicked: 在单击浏览器操作按钮时触发。
- chrome.tabs.create: 创建一个新的选项卡。
- chrome.windows.create: 创建一个新的窗口。
- chrome.storage.sync.get: 从存储中获取数据。
- chrome.storage.sync.set: 将数据存储到存储中。
- chrome.tabs.query():查询当前窗口中的选项卡。
- chrome.tabs.update():更新选项卡的属性。
2.内容脚本函数
- document.addEventListener: 监听 DOM 事件。
- document.querySelector: 选择一个 DOM 元素。
- document.createElement: 创建一个新的 DOM 元素。
- XMLHttpRequest: 发送 HTTP 请求。
- fetch: 发送异步 HTTP 请求。
3.后台脚本函数
- chrome.runtime.onInstalled: 在扩展程序安装后触发。
- chrome.runtime.onMessage: 在收到来自内容脚本或其他后台脚本的消息时触发。
- chrome.alarms.create: 创建一个闹钟。
- chrome.alarms.clearAll: 清除所有闹钟。
- chrome.notifications.create: 创建一个通知。
4.其他函数
- chrome.identity.getAuthToken: 获取用于身份验证的令牌。
- chrome.i18n.getMessage: 获取本地化消息。
- chrome.permissions.request: 请求额外的权限。
- chrome.webRequest.onBeforeRequest: 在发出网络请求之前触发。
- chrome.webRequest.onCompleted: 在完成网络请求后触发。
- chrome.identity.getProfileUserInfo():获取当前用户的个人资料信息。
- chrome.notifications.create():创建桌面通知。
- chrome.contextMenus.create():创建上下文菜单项。
- chrome.webRequest.onBeforeRequest.addListener():监听 HTTP 请求。
四,Chrome 扩展 API 函数示例
1.浏览器操作函数
要使用浏览器操作按钮,你需要在清单文件中声明 browser_action 权限在调用,如下所示:
{"manifest_version": 2,"name": "My Extension","version": "1.0.0","browser_action": {"default_icon": "icon.png","default_popup": "popup.html"},"permissions": ["<all_urls>"]
}
然后,你可以在后台脚本中使用 chrome.browserAction.onClicked 函数来监听浏览器操作按钮的点击事件,如下所示:
// background.jschrome.browserAction.onClicked.addListener(() => {alert('Button clicked!');
});
- chrome.browserAction.onClicked: 在单击浏览器操作按钮时触发。
chrome.browserAction.onClicked.addListener(() => {alert('Button clicked!');
});
- chrome.tabs.create: 创建一个新的选项卡。
chrome.tabs.create({url: 'https://www.example.com'});
- chrome.windows.create: 创建一个新的窗口。
chrome.windows.create({url: 'https://www.example.com'});
2.内容脚本函数
要使用内容脚本,你需要在清单文件中声明 content_scripts 权限,如下所示:
{"manifest_version": 2,"name": "My Extension","version": "1.0.0","content_scripts": [{"matches": ["https://*/*", "http://*/*"],"js": ["content-script.js"]}],"permissions": ["<all_urls>"]
}
然后,你可以在内容脚本中使用各种 DOM 函数和 XMLHttpRequest 对象来与网页交互,如下所示:
// content-script.jsdocument.addEventListener('click', (event) => {console.log(event.target.id);
});const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://www.example.com/api/data');
xhr.onload = () => {console.log(xhr.responseText);
};
xhr.send();
- document.addEventListener: 监听 DOM 事件。
document.addEventListener('click', (event) => {console.log(event.target.id);
});
- document.querySelector: 选择一个 DOM 元素。
const button = document.querySelector('#my-button');
- document.createElement: 创建一个新的 DOM 元素。
const newElement = document.createElement('div');
- XMLHttpRequest: 发送 HTTP 请求。
const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://www.example.com/api/data');
xhr.onload = () => {console.log(xhr.responseText);
};
xhr.send();
- fetch: 发送异步 HTTP 请求。
fetch('https://www.example.com/api/data').then(response => {response.json().then(data => {console.log(data);});
});
3.后台脚本函数
你需要在清单文件中声明 background 权限,如下所示:
{"manifest_version": 2,"name": "My Extension","version": "1.0.0","background": {"scripts": ["background.js"]},"permissions": ["<all_urls>"]
}
然后,你可以在后台脚本中使用各种 Chrome 扩展 API 函数来执行各种任务,
例如:
// background.jschrome.runtime.onInstalled.addListener(() => {console.log('Extension installed!');
});chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {console.log(request.message);sendResponse({message: 'Response from background script!'});
});chrome.alarms.create('my-alarm', {delayInMinutes: 1});chrome.notifications.create('my-notification', {title: 'My Notification',message: 'This is a notification!',iconUrl: 'icon.png'
});
- chrome.runtime.onInstalled: 在扩展程序安装后触发。
chrome.runtime.onInstalled.addListener(() => {console.log('Extension installed!');
});
- chrome.runtime.onMessage: 在收到来自内容脚本或其他后台脚本的消息时触发。
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {console.log(request.message);sendResponse({message: 'Response from background script!'});
});
- chrome.alarms.create: 创建一个闹钟。
chrome.alarms.create('my-alarm', {delayInMinutes: 1});
- chrome.alarms.clearAll: 清除所有闹钟。
chrome.alarms.clearAll();
- chrome.notifications.create: 创建一个通知。
chrome.notifications.create('my-notification', {title: 'My Notification',message: 'This is a notification!',iconUrl: 'icon.png'
});
4.其他函数
你需要在清单文件中声明相应的权限,然后在扩展程序的脚本中使用函数。例如,要使用 chrome.identity.getAuthToken 函数,你需要声明 identity 权限:
{"manifest_version": 2,"name": "My Extension","version": "1.0.0","permissions": ["identity"]
}
- chrome.identity.getAuthToken: 获取用于身份验证的令牌。
chrome.identity.getAuthToken({interactive: true}, (token) => {console.log(token);
});
- chrome.i18n.getMessage: 获取本地化消息。
const message = chrome.i18n.getMessage('my_message');
- chrome.permissions.request: 请求额外的权限。
chrome.permissions.request({permissions: ['clipboardRead']}, (granted) => {if (granted) {console.log('Permission granted!');} else {console.log('Permission denied!');}
});
- chrome.webRequest.onBeforeRequest: 在发出网络请求之前触发。
chrome.webRequest.onBeforeRequest.addListener((details) => {console.log(details.url);
}, {urls: ['<all_urls>']});
- chrome.webRequest.onCompleted: 在完成网络请求后触发。
chrome.webRequest.onCompleted.addListener((details) => {console.log(details.statusCode);
}, {urls: ['<all_urls>']});
五,manifest.json
manifest.json 是一个 JSON 文件,它描述了 Chrome 扩展程序的基本信息和功能。它位于扩展程序的根目录中,并且必须遵循特定的格式。
1.必填字段
- name: 扩展程序的名称。显示在 Chrome 网上应用店和浏览器中。
- version: 扩展程序的版本号。遵循语义版本控制约定(例如,1.2.3)。
- manifest_version: manifest.json 文件的版本号。当前版本为 3。
2.可选字段
- description: 扩展程序的简要描述。显示在 Chrome 网上应用店中。
- icons: 一个对象,其中包含扩展程序图标的路径和大小。图标大小必须是 16x16、48x48 和 128x128 像素。
- permissions: 一个数组,其中包含扩展程序所需的权限。有关权限的更多信息,请参见下文。
- background: 一个对象,其中包含后台脚本的路径。后台脚本在扩展程序安装后立即运行,并且可以在后台持续运行。
- content_scripts: 一个数组,其中包含内容脚本的配置。内容脚本在特定网站上运行,可以访问 DOM 和执行 JavaScript 代码。
- browser_action: 一个对象,其中包含浏览器操作按钮的配置。浏览器操作按钮显示在浏览器的工具栏中。
- page_action: 一个对象,其中包含页面操作按钮的配置。页面操作按钮显示在特定网站的地址栏中。
- options_page: 选项页面的路径。选项页面允许用户配置扩展程序的设置。
- web_accessible_resources: 一个数组,其中包含扩展程序可以访问的 Web 可访问资源的路径。Web 可访问资源可以是 HTML、CSS 或 JavaScript 文件。
3.权限
- "tabs": 允许扩展程序管理选项卡。这包括创建、更新和删除选项卡,以及获取选项卡信息。
- "storage": 允许扩展程序访问浏览器存储。这包括同步存储(在所有设备上可用)和本地存储(仅在当前设备上可用)。
- "webRequest": 允许扩展程序拦截和修改 HTTP 请求。这可用于阻止广告、重定向请求或注入脚本。
- "notifications": 允许扩展程序创建桌面通知。
- "identity": 允许扩展程序访问用户个人资料信息。这包括姓名、电子邮件地址和头像。
示例 manifest.json
{"name": "My Extension","version": "1.0","manifest_version": 3,"description": "This is my Chrome extension.","icons": {"16": "icon16.png","48": "icon48.png","128": "icon128.png"},"permissions": ["tabs","storage"],"background": {"service_worker": "background.js"},"content_scripts": [{"matches": ["https://*/*", "http://*/*"],"js": ["content_script.js"]}],"browser_action": {"default_icon": "icon48.png","default_popup": "popup.html"}
}
相关文章:
开发 Chrome 浏览器插件入门
目录 前言 一,创建插件 1.创建一个新的目录 2.编写清单文件 二,高级清单文件 1.编写放置右窗口 2.常驻的后台JS或后台页面 3.event-pages 短周期使用 三,Chrome 扩展 API 函数 1.浏览器操作函数 2.内容脚本函数 3.后台脚本函数 4…...
在数字化转型的浪潮中,CBDB百数服务商如何破浪前行?
在信息化时代,传统咨询企业面临着数字化转型的挑战与机遇。如何利用数字化技术提升业务效率、增强客户黏性,成为了行业关注的焦点。云南析比迪彼企业管理有限公司(CBDB)作为云南地区的企业咨询服务提供商,率先与百数展…...
程序员的实用神器
在软件开发的海洋中,程序员的实用神器如同航海中的指南针,帮助他们导航、加速开发、优化代码质量,并最终抵达成功的彼岸。这些工具覆盖了从代码编写、版本控制到测试和部署的各个环节。然而,程序员们通常会有一套自己喜欢的工具集…...
spss 导入数据的时候 用于确定数据类型的值所在的百分比95%是什么意思,数据分析,医学数据分析
在SPSS中,当提及“数据类型的值所在的百分比95%”时,这通常与数据的统计分布或置信区间有关,而不是直接关于数据类型的定义。 导入数据的时候需要定义数据类型,那么根据提供的数据,来定义,有时候ÿ…...
Python进阶之-上下文管理器
✨前言: 🌟什么是上下文管理器? 在Python中,上下文管理器是支持with语句的对象,用于为代码块提供设置及清理代码。上下文管理器广泛应用于资源管理场景,例如文件操作、网络连接、数据库会话等,…...
什么年代了,还在拿考勤说事
最近,看到了某公司的一项考勤规定:自然月内,事假累计超过3次或者累计请假时间超过8小时的,不予审批,强制休假的按旷工处理。 真的想吐槽,什么年代了,还在拿考勤说事,这是什么公司、什…...
泰迪智能科技中职大数据实验室建设(职业院校大数据实验室建设指南)
职校大数据实验室是职校校园文化建设的重要部分,大数据实训室的建设方案应涵盖多个方面,包括硬件设施的配备、软件环境的搭建、课程资源的开发、师资力量的培养以及实践教学体系的完善等。 打造特色,对接生产 社会经济与产业的…...
Qt QThreadPool线程池
1.简介 QThreadPool类管理一个QThread集合。 QThreadPool管理和重新设计单个QThread对象,以帮助降低使用线程的程序中的线程创建成本。每个Qt应用程序都有一个全局QThreadPool对象,可以通过调用globalInstance来访问该对象。 要使用其中一个QThreadPool…...
无人机+三维建模:倾斜摄影技术详解
无人机倾斜摄影测量技术是一项高新技术,近年来在国际摄影测量领域得到了快速发展。这种技术通过从一个垂直和四个倾斜的五个不同视角同步采集影像,从而获取到丰富的建筑物顶面及侧视的高分辨率纹理。这种技术不仅能够真实地反映地物情况,还能…...
Window(Qt/Vs)软件添加版本信息
Window(Qt/Vs)软件添加版本信息 文章目录 Window(Qt/Vs)软件添加版本信息VS添加版本信息添加资源文件添加版本定义头自动更新版本添加批处理脚本设置生成事件 Qt添加版本信息添加资源文件文件信息修改自动更新版本 CMake添加版本信…...
工厂模式+策略模式完成多种登录模式的实现
前提 (简单工厂不属于设计模式,而是一种编程思想【抽象一层出来】)工厂方法模式、抽象工厂模式 以上都是为了解耦,如果考虑多个纬度(如需要同时考虑多种电器,多种品牌)则优先考虑抽象工厂。 …...
赋能企业数字化转型 - 易点易动固定资产系统与飞书实现协同管理
在当前瞬息万变的商业环境下,企业如何借助信息化手段提升管理效率,已经成为摆在各行各业面前的紧迫课题。作为企业数字化转型的重要一环,固定资产管理的信息化建设更是不容忽视。 易点易动作为国内领先的企业资产管理服务商,凭借其全方位的固定资产管理解决方案,助力众多企业实…...
Sectigo 通配符SSL证书的优势分析!
Sectigo 通配符证书是一种专为需要保护同一主域名下的多个子域名而设计的安全解决方案。以下是Sectigo通配符证书的主要优势和特点: 1. 域名灵活性:使用通配符(*)符号,一张Sectigo通配符证书即可覆盖一个主域名及其所有…...
nuxt2路由,以及重构以前项目,路由使用
Nuxt.js根据pages目录结构自动生成vue-router模块的路由配置。 配置生成的路由可在.nuxt文件下的router.js文件中查看到,如: export const routerOptions {mode: history,base: /,linkActiveClass: nuxt-link-active,linkExactActiveClass: nuxt-link…...
eureka报错:链接8761被拒绝
eureka报错:链接8761被拒绝 来龙去脉 在idea环境中运行没有问题 我的配置是: server: port: 8001 spring: application: name: registry-server eureka: instance: hostname: localhost client: fetch-registry: false register-with-eureka: false …...
Linux 手动部署JDK21 环境
1、下载包(我下载的是tar) https://www.oracle.com/cn/java/technologies/downloads/#java21 完成后进行上传 2、检查已有JDK,并删除(我原有是jdk8) rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps3、清理掉 profile中的j…...
【c2】编译预处理,gdb,makefile,文件,多线程,动静态库
文章目录 1.编译预处理:C源程序 - 编译预处理【#开头指令和特殊符号进行处理,删除程序中注释和多余空白行】- 编译2.gdb调试:多进/线程中无法用3.makefile文件:make是一个解释makefile中指令的命令工具4.文件:fprint/f…...
c++结构体用构造函数进行初始化
结构体能自由组装数据,是一种很常见的数据打包方法。 当我们定义一个结构体后,没有初始化就使用,就会使用到垃圾数据,而且这种错误很难发现。 在编程时对于定义的任何变量,我们最好都先初始化。 常见的操作是每定义…...
2024年五一数学建模C题完整解题思路代码
2024年第二十一届五一数学建模竞赛题目 C题 煤矿深部开采冲击地压危险预测 煤炭是中国的主要能源和重要的工业原料。然而,随着开采深度的增加,地应力增大,井下煤岩动力灾害风险越来越大,严重影响着煤矿的安全高效开采。在各类深…...
0018__GTK+:GTK+的简介、安装、使用方法之详细攻略
GTK:GTK的简介、安装、使用方法之详细攻略-CSDN博客...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
