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 扩展开发中一定要理解的一个问题:浏览器扩展里存在多个互相隔离的上下文环境。。大约包含:
所以你在 background 环境里声明的函数,自然在目标页面里无法使用。
解决方案有两个,我建议你使用 content script,把你需要的函数注入到 content 环境,然后用过 postMessage
调用。
在您的代码中,您试图在 chrome.scripting.executeScript
中调用 callmenow
函数,这个函数中又调用了 showcontentpop
函数。然而,由于 chrome.scripting.executeScript
是在扩展的上下文之外执行的,它无法访问到 background.js
文件中定义的 showcontentpop
函数。这就是为什么您看到 "showcontentpop is not defined" 的错误。
为了解决这个问题,您需要确保 showcontentpop
函数在 chrome.scripting.executeScript
可以访问的范围内。一种方法是,将 showcontentpop
函数定义在全局作用域中,这样它就可以被 chrome.scripting.executeScript
访问。
修改后的 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] }); }});window.showcontentpop = function(input) { return output;}function callmenow(selectedText) { const resultText = showcontentpop(selectedText); alert(resultText);}
这样,showcontentpop
函数现在是在全局作用域中定义的,可以被 chrome.scripting.executeScript
访问。
我一直在开发一个应用程序,需要播放声音,并有大量的声音文件。wav格式,大小接近1GB。我已经按照官方文件制作了扩展文件。 首先我做了一个决定。压缩0次的压缩文件,全部。wav文件位于该文件下(没有任何子文件夹。即main.1.package包含所有声音文件)。然后我重新命名了。将文件夹压缩到。obb。然后我把它放在。共享存储obb文件夹下apps文件夹中的obb文件(com.moinul.app
我正在尝试构建一个自动填充扩展,但我不知道如何在我的js FIE中使用用户输入。我试着用: 这在html脚本中(弹出用于扩展)。并且在autofill js文件中我写到: 但如果我在chrome控制台中键入第一个命令并刷新页面,则full_name_E值将出现在框中。我试过导入/导出,但它不起作用。有人帮忙吗?
问题内容: 我想更改特定文件夹中文件的扩展名。我在论坛上阅读了有关此主题的信息。使用“确实”的想法,我编写了以下代码,我希望它可以工作,但不能。我很感谢您为我的失误提供任何指导。 问题答案: 在对源文件是不必要的,因为只需要在源和目标路径来完成这项工作。而且,始终返回,因此调用其返回值没有任何意义。 我简单地删除了两个。检查是否适合您。
我在两个html文件的头部包含了相同的javascript文件: 和html页面1,然后链接到html页面2。但是,当您跟随指向page2的超链接时,加载page2时,javascript文件中的代码不会再次被调用。即使我试图在html文件2的头部或正文中添加一块代码来调用JS文件中的函数,它也不会执行。 我做错什么了吗? 编辑:这是代码http://jsfiddle.net/dL6gpveL/1
问题内容: 我正在创建一个扩展程序,它将从网站上下载mp3文件。我正在尝试通过创建带有指向mp3文件的链接的新标签来实现此目的,但是chrome会继续在播放器中打开它而不是下载它。有什么方法可以创建一个弹出窗口,要求用户“另存为”文件? 问题答案: 快进了3年,现在GoogleChrome提供了API(自Chrome31起)。 在清单中声明许可后,可以通过以下调用启动下载: 如果要在脚本中生成文件
我已按以下格式设置文件夹: AAPL_176546(空子文件夹)AAPL_2000(空子文件夹)AAPL_30234(空子文件夹)AAPL_176546.mp3AAPL_176546.txtAAPL_2000.mp3AAAPL_2000.txtAAPL_30234.mp3AAPL_30234.txt 我希望遍历文件夹并将相应的.txt和.mp3文件移动到子文件夹中(例如move AAPL_1765