Chrome 151 稳定版彻底移除了对 Manifest V2 扩展的支持,此前所有强制开启 V2 的临时启动参数均已失效。MidiShow 所依赖的 Jazz-MIDI 插件(最后更新于 2020 年)仍基于 MV2,它已在最新版 Chrome 中无法使用。
此外,当使用浏览器原生 HTML5 WebMIDI API 播放包含 SysEx 消息的 MIDI 时,页面会抛出 InvalidAccessError 报错。

以下为对应的解决方案。如果在操作过程中遇到不理解步骤,可以将相关内容发送给大模型(如DeepSeek)或者使用 Codex 等 Agent 以寻求更详细的帮助
一:修复 Jazz-MIDI 扩展
步骤 1:加载 PATCH 过后的扩展
- 下载修改好后的扩展:蓝奏云下载(密码:
midi),解压至固定目录。 - 打开 Chrome 扩展程序页面(
chrome://extensions/),开启右上角 开发者模式。 - 点击 加载已解压的扩展程序,选择解压后的 Jazz-MIDI 文件夹。
- 复制生成的新扩展 ID 并记录下来(例如:
fmgmmgkdfjffjkpkbjbnpmapocgncpbc)。
步骤 2:更新 Native Messaging Host 配置
- 打开 Jazz-Plugin 的程序安装目录(默认路径通常为
C:\Program Files (x86)\Jazz-Soft\Jazz-Plugin\),找到com.jazz_soft.jazz_midi.chrome.json文件。 -
(可选) 无法确认安装路径时,可通过注册表查询:按
Win + R输入regedit打开注册表编辑器,定位至HKEY_CURRENT_USER\Software\Google\Chrome\NativeMessagingHosts\com.jazz_soft.jazz_midi,查看其默认值获取配置文件的具体路径。 - 以管理员身份运行文本编辑器,然后打开该配置文件。
- 将
allowed_origins字段中的扩展 ID 修改为你刚刚复制的新 ID:
{
"name": "com.jazz_soft.jazz_midi",
"description": "jazz-midi",
"path": "C:\\Program Files (x86)\\Jazz-Soft\\Jazz-Plugin\\jazz-chrome.exe",
"type": "stdio",
"allowed_origins": [ "chrome-extension://你的新扩展ID/" ]
}
假设记录的新扩展 ID 为 fmgmmgkdfjffjkpkbjbnpmapocgncpbc,需将 allowed_origins 这一行修改为:
"allowed_origins": [ "chrome-extension://fmgmmgkdfjffjkpkbjbnpmapocgncpbc/" ]
步骤 3:重启浏览器
- 保存配置文件,正常关闭 Chrome 浏览器并重新打开。
- 若修改未生效,可在 Chrome 地址栏输入
chrome://restart并按回车重启浏览器。 - 若仍未生效,说明后台存在残留进程。请在任务管理器中结束所有 Chrome 进程,或按
Win + R执行以下命令彻底关闭后台进程后再重新打开:
taskkill /f /im chrome.exe
二:修复 WebMIDI API 原生播放 SysEx 报错
未安装 Jazz-MIDI 时,MidiShow 会降级使用 HTML5 WebMIDI API 播放。此时若 MIDI 文件包含 SysEx 消息,浏览器会因缺失 SysEx 授权许可抛出以下错误:
InvalidAccessError: Failed to execute 'send' on 'MIDIOutput': System exclusive message is not allowed at index 0 (240).
安装我的油猴脚本重写 MIDI 权限请求即可解决:
- 脚本安装地址:GreasyFork - MidiShow SysEx 修复
- 或你可以手动添加:
// ==UserScript==
// @name MidiShow SysEx 修复
// @version 1.0
// @description 修复 MidiShow 在播放包含 SysEx 消息的 MIDI 文件时报错 InvalidAccessError 的问题。
// @match *://*.midishow.com/*
// @license MIT
// @grant none
// @run-at document-start
// @namespace https://greasyfork.org/users/466951
// ==UserScript==
(function() {
'use strict';
if (navigator.requestMIDIAccess) {
const originalRequestMIDIAccess = navigator.requestMIDIAccess.bind(navigator);
navigator.requestMIDIAccess = function(options) {
options = options || {};
options.sysex = true;
return originalRequestMIDIAccess(options);
};
}
})();