executeScript 未定义或不是 ManifestV3 扩展中的函数

Posted

技术标签:

【中文标题】executeScript 未定义或不是 ManifestV3 扩展中的函数【英文标题】:executeScript is undefined or not a function in a ManifestV3 extension 【发布时间】:2021-09-05 11:26:36 【问题描述】:

为什么 Chrome 的这个功能不起作用?我正在尝试这个例子: https://developer.chrome.com/docs/extensions/mv3/content_scripts/#programmatic.

我正在为 chrome 开发一个扩展,并从 popup.js 向服务人员 background.js 发送消息,并在 executeScript 中收到错误。

popup.js

chrome.runtime.sendMessage( from: "newScript"); 

manifest.json


    "manifest_version": 3,
    "name": "TennisBet",
    "version": "1.0",
    "description": "Extrension for bet on tennis.",
    "action": 
        "default_icon": 
            "256": "images/tennis256.png",
            "128": "images/tennis128.png",
            "64": "images/tennis64.png",
            "32": "images/tennis32.png",
            "24": "images/tennis24.png",
            "16": "images/tennis16.png"
        ,
        "default_popup": "popup/popup.html"
    ,
    "background": 
        "service_worker": "background-wrapper.js"
    ,
    "host_permissions": ["*://*/*"],
    "permissions": [
        "tabs",
        "alarms",
        "activeTab",
        "declarativeContent",
        "storage"
    ]

background.js

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) 
    switch(request.from)
        case "error":
            console.log(request.message);
            break;
        case "checkTabs":
            tabsWorker();      
            break;
        case "newScript":
            chrome.scripting.executeScript( // Error in event handler: TypeError: Cannot read property 'executeScript' of undefined
                file: "content_scripts/cscript.js"
            );
            break;
        default:
            console.log("Message listener status active");
            break;
    
);

【问题讨论】:

你提供的链接是chrome.scripting 而不是chrome.tabs @wOxxOm 问题是,我已经尝试过“chrome.scripting.executeScript”并得到错误:“事件处理程序中的错误:TypeError:无法读取未定义值的 executeScript 属性”现在我正在编辑这篇文章 嗯,它是一个单独的 API,所以它需要 "scripting" in "permissions" in manifest.json。您可以在此文档中报告错误,底部有一个链接。 @wOxxOm 感谢兄弟的支持) 【参考方案1】:

ManifestV3 中的executeScript 方法已更改,现在位于chrome.scripting API 中: https://developer.chrome.com/docs/extensions/reference/scripting/

在 manifest.json 中添加这一行:

"permissions": ["scripting"] 

background.js

chrome.scripting.executeScript(
    target: tabId: id, allFrames: true,
    files: ['content_scripts/cscript.js'],
);

【讨论】:

终于!对此给出正确答案的人... fml

以上是关于executeScript 未定义或不是 ManifestV3 扩展中的函数的主要内容,如果未能解决你的问题,请参考以下文章

Backbone.js 视图是不是需要 jQuery 或 Zepto? (或者:为啥我会收到“未捕获的类型错误:未定义不是函数”?)

onChange 检查对象的所有属性是不是存在且不是未定义或空字符串

Oracle 函数不是过程或未定义。语句被忽略

如何解决 Ajax-Zoom 错误:$.axZm 不是有效对象或未定义

类扩展值未定义的discordjs按钮问题不是构造函数或null

ReactJS - 超级表达式必须为空或函数,而不是未定义