iOS 18 Safari扩展tabs.sendMessage无法定向发送问题
iOS 18 Safari 中
browser.tabs.sendMessage 发送消息至所有标签页的问题 问题说明
调用 browser.tabs.sendMessage(tabId, {'message'}) 向指定 tabId 对应的标签页内容脚本发送消息时,iOS 18 Safari 下消息会被发送到所有标签页,而该代码在 iOS 17 中可正常仅发送至目标标签页。
可行的临时处理方案
- 校验 tabId 有效性:发送消息前先通过
browser.tabs.get(tabId)确认目标标签页的状态,避免使用无效或已过期的tabId:browser.tabs.get(tabId) .then(() => browser.tabs.sendMessage(tabId, {'message'})) .catch(err => console.error('无效的标签页ID:', err)); - 内容脚本端过滤消息:在内容脚本接收消息时,校验当前标签页的 ID 是否匹配目标
tabId,仅处理对应标签页的消息:// 内容脚本代码 browser.runtime.onMessage.addListener((message, sender) => { if (sender.tab.id === 你的目标tabId) { // 执行消息处理逻辑 } }); - 场景适配下替换API:如果扩展架构允许,可尝试用
browser.runtime.sendMessage配合自定义标签页标识传递消息,但注意该API行为与tabs.sendMessage存在差异,需调整逻辑适配。
原因分析
该问题大概率是 iOS 18 Safari 对 WebExtensions API 的实现bug,建议向 Apple 提交包含复现步骤和代码示例的反馈,推动官方修复。
内容的提问来源于stack exchange,提问作者Dinesh Choudhary
相关产品推荐
相关产品推荐

