«* 写了个网页音乐播放器扩展,本意是想不需要切换到音乐网页去点击切换歌曲,希望扩展在任意网页点击可切换该音乐网页的歌曲。 * 现在遇到的问题是,扩展在在那个音乐网页就可以正常使用(=.=),在其它网页都报错:Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.» manifest.json { "name": "播放器", "version": "0.0.0.1", "manifest_version": 3, "description": "用于切换播放模式及控制下一首歌曲的扩展程序", "icons": { "128": "icons/128x128.png" }, "action": { "default_popup": "popup/popup.html" }, "content_scripts": [{ "matches": ["音乐播放网页"], "js": ["lib/jquery.min.js", "content-scripts/content.js"] }], "externally_connectable": { "ids": ["ebjnejafkk*********plickhfn"], "matches": ["音乐播放网页"] }, "permissions": [ "tabs", "scripting" ], "web_accessible_resources": [{ "resources": ["images/*.jpeg"], "matches": [""] }] } content.js //向扩展(popup.js)发送消息 chrome.runtime.sendMessage() // 接收来自扩展(popup.js)的消息 chrome.runtime.onMessage.addListener() popup.js //向content.js(即音乐网页)发送消息 chrome.tabs.sendMessage() //接收来自content.js(即音乐网页)的消息 chrome.runtime.onMessage.addListener
chrome插件开发怎么做热更新? 每次都要build一下后,插件才能更新,太不方便了,有什么办法解决?
这个是 popup.js,发送信息到 content.js。假设用户同时打开了2个浏览器页面,都使用这个插件。问2个插件的contentjs都会收到这个信息吗? chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) { chrome.tabs.sendMessage(tabs[0].id, { type: "cn_start", data: { list }, }) }) contentjs 监听信息 chrome.runtime.onMessage.addListener(async function ( message, sender, sendResponse ) { const { type, data } = message if (type === "cn_start") { console.log("cn_start") chrome.runtime.sendMessage({ type: "bg_start", data, }) } } chrome.runtime.sendMessage({ type: "bg_start", data, }) 这样发送信息,2个插件都会收到吧? 我测试的结果是 2 个插件都会收到来自其中一个的 content.js 发送过来的信息。 说一下我的业务场景。我再插件popup页面有个开始按钮,用户点击开始,我需要contentjs执行逻辑抓取页面上的内容,并发送信息通知,显示到popup页面上
在Chrome浏览器插件里,对网页实现自动上传文件的问题。 页面里的上传按钮 插件里的js代码 document.querySelector(".upload").click() 这样能唤起上传文件选择弹框,再手动选择文件是没问题。 但是想实现自动化,不要人工干预,有什么办法? 模拟 输入、点击 操作没有问题,这个上传整不会了。
chrome扩展的background.js 文件无法调用同文件中的函数,我基于 manifest v3 创建了一个 chrome extension,具体代码如下 manifest.json { "manifest_version": 3, "name": "achromeextension", "version": "1.0", "description": "", "permissions": ["contextMenus", "activeTab", "scripting"], "background": { "service_worker": "background.js" }, "icons": { "48": "icon.png" } } background.js 的代码如下 chrome.runtime.onInstalled.addListener(() => { chrome.contextMenus.create({ id: "chromeextensiondemo", title: "chromeextensiondemo", contexts: ["selection"] }); }); chrome.contextMenus.onClicked.addListener((info, tab) => { if (info.menuItemId === "chromeextensiondemo") { chrome.scripting.executeScript({ target: { tabId: tab.id }, function: callmenow, args: [info.selectionText] }); } }); function showcontentpop(input) { return output; } function callmenow(selectedText) { const resultText = showcontentpop(selectedText); alert(resultText); } 但现在遇到的问题是,提示错误,错误信息是 showcontentpop is not defined. 请问这个该怎么处理? 能正常调用函数 showcontentpop
我在开发一个 chrome 的插件,现在遇到的问题是无法在 css 文件中调用图片文件,目录结构如下 /project-root │ ├── manifest.json ├── css │ └── style.css ├── images │ ├── icon-48.png │ ├── icon-32.jpg │ └── icon-16.png └── scripts └── content.js 在 manifest.json 文件中已经通过 web_accessible_resources 将对应图片引入 "web_accessible_resources": [ { "resources": [ "/images/*" ], "matches": [ "" ] } ], "content_scripts": [ { "matches": [ "" ], "js": [ "scripts/content.js" ], "css": [ "css/style.css" ] } ], 在 style.css 中 .text-icon { background-image: url('../images/icon-48.png'); background-size: cover; width: 20px; height: 20px; } 始终无法将图片载入。 我尝试过多个方法 * 绝对路径,相对路径,都无法载入图片 * 我尝试用const imageUrl = chrome.runtime.getURL('images/icon-48.png'); console.log('Image URL:', imageUrl); icon.style.backgroundImage = "url(${imageUrl})"; 但得到的图片路径转字符了得到的结果是 "background-image: url("chrome-extension://adfdaksfdafdk/images/icon-48.png");" 上引号变成了 """ 这样的字符。 请问在 manifest version3 中正确的调用图片是该怎么操作呢?