Converse.js 14.0.1 配置参数详解

逐项详解 Converse.js 14.0.1 全部 153 个初始化配置项(默认值/类型/取值/场景),按 11 个功能域分组,附企业内网、公共社区、嵌入浮窗三套生产配置模板与 6 个高频踩坑排障实录。

Converse.jsConverse.jsXMPPJavaScript即时通信自托管2026/10/25

Converse.js 14.0.1 配置参数详解

目标:逐项讲清 Converse.js 14.0.1 全部 153 个初始化配置项(converse.initialize({...}) 的入参)——默认值、类型、取值范围与使用场景,按 11 个功能域分组,附三套生产配置模板与高频踩坑。配置项清单实查自官方 configuration 文档(2026-10-25),关键项已在 Ubuntu 22.04 自托管实例 + Chromium 实测验证。

一、环境信息

  • Converse.js:14.0.1(npm 包 converse.js,2026-10-17 发布)
  • 参数来源:官方配置文档 conversejs.org/docs/html/configuration.html(2026-10-25 采集,共 153 项)
  • 验证环境:Ubuntu 22.04(x86_64)+ nginx/1.18.0 自托管 dist(安装方法见本专栏《Ubuntu 22.04 安装 Converse.js 14 指南》),Chromium 无头模式实测
  • 联调服务端:Prosody IM 0.12(WebSocket 传输)

二、前置条件

  1. 已完成 Converse.js 14.0.1 的部署(自托管或 CDN,方法见本专栏安装与部署篇目);
  2. 能修改承载页面的 HTML/JS——Converse.js 没有服务端配置文件,全部配置都是页面侧 JS 对象;
  3. 一个可连接的 XMPP 服务器端点(本文示例用 wss://conversejs.org/xmpp-websocket 公共端点与自托管 Prosody 端点)。

三、参数查看与修改方式

Converse.js 是浏览器端库,配置只有「初始化入参」一个来源,有三种等价写法:

方式 1(最常用):converse.initialize() 传对象

converse.initialize({
  websocket_url: "wss://conversejs.org/xmpp-websocket",
  view_mode: "fullscreen",
  i18n: "zh_CN"
});

方式 2:外部 config.js 注入(推荐生产使用)

页面先加载 /config.js(定义 window.CONVERSE_CONFIG 对象),初始化时透传,改配置不动页面代码:

converse.initialize(window.CONVERSE_CONFIG || {});

方式 3:URL 片段临时调日志级别

个别参数支持 URL 覆盖用于现场调试,如 https://<站点>/#converse?loglevel=debug 临时把 loglevel 提到 debug,刷新即生效、不影响其他访客。

查看生效值:浏览器控制台经插件 API 读取(api.settings.get('websocket_url') 等,插件写法见本专栏《Converse.js 嵌入集成使用指南》篇)。

⚠️ 注意:配置必须在 converse.initialize() 调用之前就位。initialize 之后再改 window.CONVERSE_CONFIG 或全局变量不会生效,必须重新初始化(刷新页面)。

四、参数总览

153 个参数按功能域分为 11 组:

组参数数管辖范围
5.1 连接与传输13WebSocket/BOSH 端点、连接保持、流管理
5.2 认证与账号15登录方式、域名锁定、注册引导
5.3 视图与界面21三种视图模式、主题、语言、工具栏
5.4 联系人与在线状态15花名册、订阅、presence
5.5 消息行为12修正/撤回、输入状态、已读标记
5.6 媒体渲染与链接处理11图片/音视频内联、域名白名单、链接清洗
5.7 表情5系统 emoji、图片 emoji、快捷反应
5.8 群聊 MUC34房间域、自动加入、管理员工具、书签
5.9 历史归档与本地存储10MAM 归档、IndexedDB、消息裁剪
5.10 通知与声音8桌面通知、提示音、@提醒
5.11 插件扩展与高级9插件白/黑名单、OMEMO、日志

五、核心参数分类详解

5.1 连接与传输

参数默认值类型说明
websocket_urlundefined字符串XMPP WebSocket 端点,如 wss://xmpp.example.com/xmpp-websocket。与 bosh_service_url 至少配一个
bosh_service_urlundefined字符串BOSH 长轮询端点,如 https://xmpp.example.com:5280/bosh/。与 websocket_url 二选一
discover_connection_methodstrue布尔按 XEP-0156 请求 https://<JID域>/.well-known/host-meta 自动发现端点。JID 域不可解析时必须置 false,否则发现失败阻断登录(实测见七、7.2)
connection_options{}对象透传给底层 Strophe.js 连接对象的选项
keepalivetrue布尔跨页面刷新保持登录态(凭据缓存于所选存储)
auto_reconnectfalse布尔连接意外断开时自动重连;生产建议开
ping_interval60数字(秒)空闲时向服务器发 ping 保活的间隔;设为正值才生效
stanza_timeout20000数字(毫秒)等待 Stanza 应答(如 IQ 请求)的超时,超时抛错
enable_smackstrue布尔XEP-0198 流管理,弱网断线后可续传未确认 Stanza
smacks_max_unacked_stanzas5数字累计多少条未确认 Stanza 后主动向服务器请求确认
csi_waiting_time0数字(秒)XEP-0352 客户端状态指示:页面转入后台多少秒后声明 inactive,省服务端推送开销
reuse_scram_keystrue布尔缓存 SCRAM 派生密钥加速后续登录;换密码后旧缓存自动失效
show_connection_url_inputfalse布尔登录表单显示「连接地址」输入框,用户提交的 ws/http 地址会分别写入 websocket_url/bosh_service_url

关键项示例(对接自托管服务端、关发现、开自动重连):

converse.initialize({
  websocket_url: "wss://im.example.com/xmpp-websocket",
  discover_connection_methods: false,
  auto_reconnect: true,
  ping_interval: 60
});

5.2 认证与账号

参数默认值类型说明
authentication'login'枚举认证方式:login(账号密码表单)/ external(外部 SSO 会话)/ anonymous(匿名)/ prebind(服务端预绑定,免二次登录)
credentials_urlnull字符串配合 authentication: 'login':初始化前向该 URL 取凭据(由后端会话换发 JID/密码)
prebind_urlnull字符串prebind 模式下向该 URL 请求预绑定的 BOSH 会话令牌
oauth_providers[]数组允许用户选择的 OAuth 登录提供商列表
jid''字符串预置登录 JID(配合 SSO/prebind 场景免输入)
default_domainundefined字符串默认域名:用户只输用户名即可登录,自动补全 JID 域名
locked_domainundefined字符串锁定域名:比 default_domain 更强,不允许登录其他域
auto_loginfalse布尔页面加载即自动登录(须配合 jid+凭据来源或 keepalive 已缓存会话)
allow_logouttrue布尔为 false 时不显示登出按钮(SSO 场景常关)
allow_registrationtrue布尔显示 XEP-0077 带内注册表单(需服务端开启注册)
registration_domain''字符串指定注册域名,注册表单免输服务器域名
providers_link'https://xmpp.net/directory.php'字符串注册表单上「公共服务器名录」链接
xmpp_providers_url'https://data.xmpp.net/providers/v2/providers-B.json'字符串注册表单展示的公共 XMPP 服务商列表数据源
autocomplete_providers_url'https://data.xmpp.net/providers/v2/providers-Ds.json'字符串添加联系人时 JID 域名自动补全的数据源
domain_placeholder'e.g. conversejs.org'字符串注册表单域名输入框的占位文本

💡 技术拓展:四种认证方式对应四类部署形态——

方式用户输入典型场景
loginJID + 密码默认表单登录,独立 IM 站
external无(外部会话)已登录业务系统后免密进入
anonymous无访客临时聊天(需服务端开匿名域)
prebind无后端先与 XMPP 建会话再交给前端,单点登录体验最好

本文示例与专栏各篇默认用 login;给既有系统做嵌入且要免登录时选 prebind(需后端配合,见本专栏《Converse.js 嵌入集成使用指南》篇)。

5.3 视图与界面

参数默认值类型说明
view_mode'fullscreen'枚举视图模式:fullscreen 整页 / overlayed 右下角浮窗 / embedded 嵌入页面指定 DOM 区域
singletonfalse布尔为 true 时只允许同时存在一个会话窗(嵌入客服场景常用)
sticky_controlboxfullscreen 时为 true,否则 false布尔控制框(登录/联系人/群聊面板)不可关闭
show_controlbox_by_defaultfullscreen 时为 true,否则 false布尔打开页面即显示控制框
show_client_infotrue布尔控制框显示版本信息图标(点开「关于」弹窗)
show_backgroundtrue布尔显示带 Converse logo 的背景
theme'default'字符串亮色主题名
dark_theme'dracula'字符串暗色模式使用的主题
colorize_usernamefalse布尔按 XEP-0392 一致性算法给昵称着色
i18n自动侦测浏览器语言(缺省 en)字符串界面语言,简体中文为 'zh_CN';语言包按 chunk 异步加载
locales内置全集数组限定可切换的语言列表
rtl_langs["ar","fa","he","ug"]数组需要从右到左渲染的语言清单
time_format'HH:mm'字符串消息时间格式,如 hh:mm a
rootwindow.documentDOM 对象把 Converse 挂进 Web Component 的 shadow DOM 时设为该 shadow-root
assets_path'/dist/'字符串异步资源(语言包、emoji、提示音、字体)加载基路径;平铺部署必须改(见七、7.4)
allow_dragresizetrue布尔允许拖拽边缘调整聊天窗大小(overlayed 模式)
dragresize_top_margin0数字(像素)聊天窗上边缘拖拽时距窗口顶部的最小间距
auto_focustrue布尔打开会话自动聚焦输入框;登录框加载后自动聚焦用户名
show_send_buttontrue布尔显示发送按钮(移动端点按场景建议保留)
visible_toolbar_buttons内置全集对象精细控制消息工具栏各按钮(表情/上传/纠正等)显隐
allow_url_history_changetrue布尔允许 Converse 用 History API 改地址栏(如 #converse/room?jid=...);嵌入路由敏感的站点时置 false

三种 view_mode 的实测差异与嵌入示例见本专栏《Converse.js 嵌入集成使用指南》篇。

5.4 联系人与在线状态

参数默认值类型说明
allow_contact_requeststrue布尔允许加好友/处理订阅请求;置 false 则隐藏相关 UI 并忽略一切入站请求
allow_contact_removaltrue布尔允许用户删除花名册联系人
allow_non_roster_messagingfalse布尔是否接收非花名册用户消息;开放联邦场景开启会增加垃圾消息面
auto_subscribefalse布尔自动回订所有入站订阅请求(客服机器人式账号可用)
roster_groupstrue布尔按分组展示花名册
hide_offline_usersfalse布尔花名册隐藏离线用户
show_self_in_rostertrue布尔花名册显示自己(可与自己对话做草稿/自测)
lazy_load_vcardstrue布尔vCard(头像等)按需加载;置 false 则一登录就全量拉取
enable_roster_versioningtrue布尔花名册版本协商(XEP-0237),只同步变更;置 false 每次全量拉
nicknameundefined字符串预置当前用户昵称,用于 presence 与 MUC 默认昵称
priority0数字本资源(此 Converse 实例)presence 优先级
idle_presence_timeout300数字(秒)无操作多少秒后按 XEP-0319 发送 idle 状态
auto_away0数字(秒)多少秒后自动置 away;0 关闭
auto_xa0数字(秒)多少秒后自动置 extended away;0 关闭
synchronize_availabilitytrue布尔与本账号其他客户端同步在线状态(别处改 busy 这里同步)

5.5 消息行为

参数默认值类型说明
allow_message_corrections'all'枚举消息修正(XEP-0308):'all' 可改任意自己的消息 / 'last' 仅最近一条 / 其他值关闭
allow_message_retraction'all'枚举消息撤回(XEP-0424):'all' 用户可撤回自己的、 moderator 可撤回他人的
show_retraction_warningtrue布尔撤回前弹出确认提示
allow_message_stylingtrue布尔XEP-0393 消息样式提示(*粗体*、`代码` 等)
message_limit0数字单条消息字符数上限,0 不限(仅前端 UX 限制,不构成安全边界)
send_chat_state_notificationstrue布尔/数组XEP-0085 输入状态通知(active/composing/gone/inactive/paused),可传数组只发部分状态
send_chat_markers['received','displayed','acknowledged']数组XEP-0333 消息标记:收到/已读/确认
chatstate_notification_blacklist[]数组这些 JID 的输入状态不触发桌面通知
auto_join_private_chats[]数组登录后自动打开与这些 JID 的单聊窗口
filter_by_resourcefalse布尔只接收发向当前资源的消息(1.0.3 之前的老行为,兼容用)
show_message_avatartrue布尔消息旁显示发送者头像
show_tab_notificationstrue布尔浏览器标签页标题显示未读计数

5.6 媒体渲染与链接处理

参数默认值类型说明
render_mediatrue布尔消息中的媒体 URL(图/音/视频)渲染为内联播放器/图片
show_images_inlinetrue布尔为 false 时图片只显示链接不渲染
image_urls_regexnull正则自定义「哪些 URL 视为图片」的匹配规则
allowed_image_domainsnull数组/null图片域名白名单;null 不限制
allowed_audio_domainsnull数组/null音频域名白名单
allowed_video_domainsnull数组/null视频域名白名单
embed_3rd_party_media_playerstrue布尔把第三方媒体站链接(如 Spotify)转为嵌入式播放器
fetch_url_headersfalse布尔主动抓取消息中 URL 的响应头以判断可否内联嵌入(增加流量与延迟)
filter_url_query_paramsnull字符串/数组匹配到的 query 参数从 URL 中剥除(去追踪参数场景)
geouri_regexopenstreetmap 匹配正则正则从 OSM 链接提取经纬度
geouri_replacementOSM 定位链接模板字符串把 geo URI 替换为可点击地图链接,$1/$2 为经纬度

内网部署收紧示例(只渲染本站媒体):

converse.initialize({
  allowed_image_domains: ["im.example.com"],
  allowed_audio_domains: ["im.example.com"],
  allowed_video_domains: ["im.example.com"],
  embed_3rd_party_media_players: false
});

5.7 表情

参数默认值类型说明
use_system_emojistrue布尔用操作系统原生 emoji 渲染;置 false 走图片 emoji
emoji_image_path'https://twemoji.maxcdn.com/2/'字符串图片 emoji 的取图基地址(use_system_emojis: false 时生效)
popular_emojis[':thumbsup:',':heart:',':laughing:',':joy:',':tada:']数组表情面板与消息反应(XEP-0444)的快捷 emoji
emoji_categories内置全集对象自定义表情面板分类
emoji_categories_label内置全集对象自定义各分类的显示名

5.8 群聊 MUC

参数默认值类型说明
muc_domainundefined字符串默认 MUC 组件域名,如 conference.example.com
locked_muc_domainfalse布尔/'hidden'锁定 MUC 域只能用 muc_domain;'hidden' 连域名输入框都隐藏
locked_muc_nicknamefalse布尔/字符串锁定群聊昵称,用户不能改
muc_nickname_from_jidfalse布尔用 JID 节点部分自动作 MUC 昵称;撞名自动加数字
muc_instant_roomstrue布尔允许创建即时房间(免配置即开聊)
auto_join_rooms[]数组登录后自动加入的群聊 JID 列表
auto_join_on_invitefalse布尔被邀请时无需确认直接进房
auto_register_muc_nickname'unregister'布尔/'unregister'进房时自动注册昵称
muc_fetch_memberstrue布尔进房即拉取成员列表
muc_history_max_stanzasundefined数字进房时拉取历史消息的最大条数(缺省按房间/服务器配置)
muc_mention_autocomplete_min_chars0数字输入几个字符后弹出昵称补全
muc_mention_autocomplete_filter'contains'枚举昵称补全过滤方式:contains / starts_with
muc_mention_autocomplete_show_avatartrue布尔昵称补全列表显示头像
muc_show_info_messages状态码/角色变化/进出房等事件集合数组群内显示哪些提示类消息(进出房、角色变更等)
muc_show_logs_before_joinfalse布尔首次进房时先显示历史(需 MAM)与昵称表单
muc_clear_messages_on_leavetrue布尔离房即清空本地缓存的该房消息(8.0 起默认行为)
muc_send_probesfalse布尔对资料缺失的消息作者发 presence probe
muc_respect_autojoin遵循书签(true)布尔是否按书签中的 autojoin 标记自动进房
muc_roomid_policynull正则房间名合法性格式约束
muc_roomid_policy_hintnull字符串配合上一条,给用户看的房间名规则说明(支持 <br>/<b>/<em>)
muc_subscribe_to_raifalse布尔XEP-0437 房间活跃度指示订阅
muc_hats['xep317']数组XEP-0317 Hats(群内身份徽标)支持
muc_disable_slash_commandsfalse布尔禁用 /kick、/ban 等斜杠管理命令
allow_muc_invitationstrue布尔允许邀请他人进房(显示邀请控件)
allow_bookmarkstrue布尔群聊书签功能(需 converse-bookmarks 插件)
allow_public_bookmarksfalse布尔公共书签(服务端不支持私有 PEP 节点时的降级)
auto_list_roomsfalse布尔「查询群聊」弹窗自动列出当前服务器上的房间
muc_search_service'api@search.jabber.network'字符串MUC 搜索服务 JID;置空字符串关闭房间搜索补全
enable_muc_pushfalse布尔新进房时按 XEP-0357 注册推送 App Server
modtools_disable_assignfalse布尔/数组管理员工具中禁用指派某些身份/角色
modtools_disable_query[]数组管理员工具中禁用查询某些身份/角色;全禁则对应标签页不显示
roomconfig_whitelist[]数组房间配置表单只显示列出的配置项(默认全显示)
hide_muc_participantsfalse布尔默认隐藏群成员列表
muc_grouped_by_domainfalse布尔群聊按域名分组折叠展示

常用群聊初始化示例:

converse.initialize({
  muc_domain: "conference.example.com",
  locked_muc_domain: true,
  auto_join_rooms: ["lobby@conference.example.com"],
  muc_nickname_from_jid: true
});

5.9 历史归档与本地存储

参数默认值类型说明
message_archivingundefined字符串MAM(XEP-0313)归档服务位置;需服务端启用 MAM 才有效
message_archiving_timeout20000数字(毫秒)请求归档消息的等待超时
archived_messages_page_size50数字每页拉取的归档消息条数
auto_fill_history_gapstrue布尔自动补齐历史缺口;置 false 则缺口处显示可点击占位
mam_request_all_pagesfalse布尔从比最新缓存更新的位置起拉归档时是否翻完所有页
persistent_store'IndexedDB'枚举本地持久化存储:IndexedDB / localStorage / sessionStorage
clear_cache_on_logoutfalse布尔登出时清空全部本地缓存(不论哪种存储)
clear_messages_on_reconnectionfalse布尔重连后清空已缓存消息(强一致性诉求场景)
prune_messages_aboveundefined数字设为正整数则把聊天历史裁剪到该条数
pruning_behavior'unscrolled'枚举裁剪时机:默认仅当聊天窗未上翻时裁剪,避免打断阅读

💡 技术拓展:三种 persistent_store 的取舍——IndexedDB 容量大、异步不阻塞 UI,是默认;localStorage 兼容性最老但容量小且同步阻塞;sessionStorage 关标签即清,适合「公用电脑不留痕」场景。

5.10 通知与声音

参数默认值类型说明
show_desktop_notificationstrue布尔HTML5 桌面通知总开关
show_chat_state_notificationsfalse布尔聊天对象状态变化(上线/离开等)也弹桌面通知
notify_all_room_messagesfalse布尔群里所有消息都通知;默认仅被@时通知
notify_nicknames_without_referencesfalse布尔对没有 XEP-0372 引用标记的昵称提及也发通知
notification_delay5000数字(毫秒)桌面通知展示时长;0 为常驻直到用户关闭(需浏览器支持)
notification_icon'logo/conversejs-filled.svg'字符串桌面通知图标
play_soundsfalse布尔收到私聊/被@时播放提示音
sounds_path'${assets_path}/sounds/'(随 assets_path)字符串提示音文件目录(msg_received.mp3/ogg)

5.11 插件扩展与高级

参数默认值类型说明
whitelisted_plugins[]数组初始化时加载的插件白名单;自定义插件必须列在这里才会加载(v14 实测,见七、7.3)
blacklisted_plugins[]数组插件黑名单:即使在白名单也不初始化,用于裁剪内置功能
strict_plugin_dependenciesfalse布尔插件覆盖了不存在的对象时抛错(插件开发期建议开)
omemo_defaultfalse布尔支持的会话默认开启 OMEMO 端到端加密
allow_user_trust_overridetrue布尔/'off'允许用户自行决定此浏览器是否可信(OMEMO 信任模型)
allow_adhoc_commandstrue布尔特权用户可在设置弹窗执行 XEP-0050 Ad-Hoc 管理命令
xhr_user_search_urlnull字符串用户搜索接口地址(花名册加人的另一种数据源)
push_app_servers[]数组XEP-0357 推送 App Server 配置
loglevel'info'枚举'debug'/'info'/'warn'/'error'/'fatal';可用 URL 片段 #converse?loglevel=debug 临时覆盖

六、生产配置模板

6.1 企业内网自托管(对接内网 Prosody/ejabberd)

适用:公司内网 IM,静态资源托管在一台 2C4G 的 Nginx 服务器即可(Converse.js 自身几乎零资源消耗),账号体系收敛到内网 XMPP 服务器:

converse.initialize({
  websocket_url: "wss://im.internal.example.com/xmpp-websocket",
  discover_connection_methods: false,   // 内网域名不可被公共解析,必须关
  locked_domain: "internal.example.com",
  muc_domain: "conference.internal.example.com",
  locked_muc_domain: true,
  allow_registration: false,            // 账号由管理员在服务端开通
  auto_reconnect: true,
  i18n: "zh_CN",
  view_mode: "fullscreen",
  allow_non_roster_messaging: false,
  show_desktop_notifications: true,
  play_sounds: true
});

6.2 公共社区聊天站(开放注册)

适用:面向访客的公开社区,允许自助注册、自动发现端点:

converse.initialize({
  websocket_url: "wss://im.example.com/xmpp-websocket",
  authentication: "login",
  allow_registration: true,
  registration_domain: "example.com",
  discover_connection_methods: true,
  view_mode: "fullscreen",
  i18n: "zh_CN",
  auto_reconnect: true,
  message_archiving: "im.example.com",   // 服务端已启用 MAM
  allow_message_corrections: "all",
  send_chat_markers: ["received", "displayed"]
});

6.3 嵌入既有网站的客服/社区浮窗

适用:把聊天嵌入产品页右下角,一次只开一个会话、不打扰页面路由:

converse.initialize({
  websocket_url: "wss://im.example.com/xmpp-websocket",
  view_mode: "overlayed",
  singleton: true,
  allow_url_history_change: false,       // 不动宿主页面地址栏
  locked_domain: "example.com",
  allow_registration: false,
  hide_offline_users: true,
  show_controlbox_by_default: false,
  i18n: "zh_CN"
});

⚠️ 注意:三套模板都以 HTTPS 端点为前提——wss:// 与页面 HTTPS 缺一不可,SCRAM 认证在非安全上下文会直接失败(见七、7.5)。

七、常见问题(FAQ)

7.1 改了配置但不生效

按序排查:① 配置必须在 converse.initialize() 调用之前定义完成——用外部 config.js 时确认它先于初始化内联脚本加载;② 若用静态服务器 7 天缓存策略托管了 .js(含 config.js),浏览器可能拿到旧缓存,硬刷新(Ctrl+F5)验证;③ 确认改的是实际被访问的页面文件。

7.2 登录时 TypeError: Failed to fetch,无法提交

discover_connection_methods 默认为 true,初始化或登录时会先请求 https://<JID域名>/.well-known/host-meta 做 XEP-0156 端点发现;JID 域名不可解析(内网域名、localhost)或该地址无 HTTPS 服务时请求失败并阻断登录。解决:显式配置 websocket_url 并置 discover_connection_methods: false。实测案例(含 WebSocket 握手 101 验证)见本专栏《Converse.js 嵌入集成使用指南》篇。

7.3 自定义插件的 initialize() 不执行

v14 实测:自定义插件名必须列入 whitelisted_plugins 才会被加载——

converse.plugins.add('myplugin', {
  initialize() {
    const api = this._converse.api;   // v14 的 API 面从这里取
    api.listen.on('connected', () => console.log('connected'));
  }
});
converse.initialize({
  websocket_url: "wss://im.example.com/xmpp-websocket",
  whitelisted_plugins: ['myplugin']
});

另注意 v14 全局 converse 对象上没有 .api,API 只能在插件内部经 this._converse.api 获取。

7.4 表情面板空白、语言不切换,控制台 Failed to load emoji.json

异步资源按 assets_path(默认 /dist/)加载。把 dist 内容平铺到站点根会导致 /dist/emoji.json 404。保持 /dist/ 子路径部署,或显式设置 assets_path 为实际路径。语言包 chunk 同理(i18n: "zh_CN" 生效前提是语言 chunk 可加载)。

7.5 HTTP 站点登录直接失败

SCRAM 密码认证的密钥派生走浏览器 WebCrypto(crypto.subtle),该 API 只在安全上下文(HTTPS、localhost、127.0.0.1)可用。实测在非安全上下文登录报 Cannot read properties of undefined (reading 'deriveBits'),SASL 失败。生产必须全站 HTTPS(页面与 wss:// 端点);仅本机测试可临时用 http://localhost。

7.6 如何现场抓登录/收发日志

不重发版本即可提日志级别:地址栏追加 #converse?loglevel=debug 刷新(等价于 loglevel: 'debug'),Stanza 收发、SASL 流程会打进浏览器控制台;配合服务端日志(如 Prosody 的 Authenticated as ...)即可两端对照定位。

八、参考链接

本专栏其他篇目:《Converse.js 介绍与选型指南》、《Ubuntu 22.04 安装 Converse.js 14 指南》、《Converse.js Docker Compose 部署指南》、《Converse.js 嵌入集成使用指南》。