Chrome 89.0.4389.114 扩展权限清单 V3

问题描述

我正在尝试更新 Manifest V3 的一个简单扩展。我一定是做错了什么,因为像 permissions 这样的简单标签不能正常工作......我知道 Chrome 正在阅读该节,因为如果我输入了一个虚假的许可,我会收到一个错误,但是关于: //extensions 不显示我的扩展程序的权限 contextMenus,即使它在那里。并且 chrome.contextMenus 未定义,因此我无法创建菜单

Manifest V3 仍然是半生不熟的,还没有准备好迎接黄金时段,还是我在做一些被忽略的蠢事?

{
    "manifest_version": 3,"name": "TESS+","version": "0.043","description": "TESS+ -- My browser extension","icons": {
        "48": "TESS+Icon.png"
    },"content_scripts": [
        {
            "matches": ["*://tmsearch.uspto.gov/bin/showfield*" ],"js": ["jquery-3.6.0.min.js","tess+.js","FH.js","DateTime.js"]
        }
    ],"background": {
        "service_worker": "tess-bg.js"
    },"web_accessible_resources": [
        {
            "resources": [ "TESS+Button.png" ],"matches": [ "https://tsdr.uspto.gov/*" ]
        }
    ],"permissions": [
        "contextMenus"
    ],"host_permissions": [
        "http://tsdr.uspto.gov/","https://tsdr.uspto.gov/"
    ]

}

解决方法

正如@wOxxOm 猜测的那样,我试图从前台内容脚本创建上下文菜单,而不是从后台服务工作者创建。

为了将来参考,这里有一个使用 Manifest V3 的简单 contextMenu 示例:

ma​​nifest.js:

{
    "manifest_version": 3,"name": "ManifestV3Test","version": "0","background": {
        "service_worker": "bg.js"
    },"content_scripts": [
        {
            "matches": [ "<all_urls>" ],"js": [ "fg.js" ]
        }
    ],"permissions": [
        "contextMenus"
    ]
}

bg.js

/*
 * bg.js -- a ManifestV3 service_worker that installs a context menu
 *          plus minimal framework for messaging between here and
 *          a content script.
 */
chrome.runtime.onInstalled.addListener( function( ) {
    chrome.contextMenus.create( {
        id: 'a unique id',title: 'My Context Menu',contexts: [ 'all' ]
    } );
} );

chrome.contextMenus.onClicked.addListener( (info,tabs) => {
    console.log( 'context menu clicked' );
    console.log( info );
    console.log( tabs );
    chrome.tabs.sendMessage( tabs.id,'request-object',(rsp)=> { console.log( "content script replies:" );
                                       console.log( rsp ); } );
} );

fg.js

/*
 * fg.js -- a content script for a minimal ManifestV3 test extension.
 */

console.log( "Activating content script...try context menu!" );

chrome.runtime.onMessage.addListener( (req,snd,rsp) => {
    console.log( snd.tab ? "another content script says:" : "the extension says:" );
    console.log( req );
    rsp( 'a-response-object' );
} );

此功能从 2021 年 4 月 11 日起在 Chrome 89.0.4389.114 上有效,但 Firefox-87.0 (MacOS) 将其拒绝为“不受支持的清单版本”。

,

虽然 MV3 确实仍处于半损坏状态,但许可是 WAI(按预期工作)。

Chrome 在 chrome://extensions 页面中的权限列表仅显示那些在安装扩展程序期间产生警告的条目。请参阅文档中的 listcontextMenus 权限不会产生此类警告,因此未显示在列表中。

这种行为对于开发者或知识渊博的用户来说可能看起来很愚蠢,但 Chrome 一直在简化其 UI/UX 以适应大多数人。