ContactPicker API 目前仅支持单选,multiple: true 被所有实现浏览器忽略;仅 Chrome for Android/ChromeOS 支持,且需 HTTPS、用户主动触发、声明字段权限。

目前无法通过 ContactPicker API 选择多个联系人——该 API 仅支持单选,且仅在部分平台(如 Chrome for Android、ChromeOS)中可用,桌面版 Chrome 和 Safari、Firefox 均不支持。
ContactPicker API 的基本用法(单选)
虽然不能多选,但可以正确调用系统通讯录选择一个联系人:
- 需在 HTTPS 环境或 localhost 下运行(不支持 HTTP)
- 需用户主动触发(如点击按钮),不能自动调用
- 需请求特定字段权限(如 name、email、tel),未声明的字段不会返回
- 调用示例:
async function pickContact() {
if ('contacts' in navigator && 'pick' in navigator.contacts) {
try {
const props = ['name', 'email', 'tel'];
const contacts = await navigator.contacts.pick(props, { multiple: false });
console.log(contacts); // 返回一个 Contact对象数组,但长度恒为1
} catch (err) {
console.error('选择失败:', err);
}
} else {
console.warn('Contact Picker API 不可用');
}
}
为什么 multiple: true 不生效?
尽管规范曾提议支持 multiple: true,但截至 Chrome 127(2024年中),所有已实现该 API 的浏览器均忽略该选项,强制单选。调用时传入 { multiple: true } 不会报错,但行为与 false 完全一致。
替代方案:引导用户多次选择
若业务确实需要多个联系人,可采用“循环单选”方式模拟多选:
立即学习“前端免费学习笔记(深入)”;
- 提供“添加联系人”按钮,每次点击调用一次
navigator.contacts.pick() - 将每次返回的联系人存入数组,去重(按 email 或 tel 判断)
- 显示已选列表,并支持移除
- 注意:重复调用可能触发系统权限提示(取决于系统策略),建议首次成功后缓存权限状态
兼容性与注意事项
实际部署前务必检查运行环境:
- 仅 Chrome 80+(Android / ChromeOS)支持;Windows/macOS 版 Chrome 已弃用该 API
- 必须启用
Contacts权限(系统级,非网页权限弹窗) - 用户拒绝一次后,再次调用会静默失败,无重试机制
- 不支持读取全部联系人,仅支持用户手动选取(隐私限制)



















