无需登录 数据私有 本地保存

Contact Picker API 测试 - 选取系统通讯录联系人

14
0
0
0

Contact Picker API 测试

安全地从用户通讯录中选取联系人信息

检测中...
选择要获取的联系人属性
姓名 电话 邮箱 地址 头像
需要浏览器支持 Contact Picker API
选取结果 0

尚未选取联系人,点击上方按钮开始

原始JSON数据
示例数据结构(模拟展示) — 实际API返回的数据格式参考
[ { "name": [{ "givenName": "小明", "familyName": "张" }], "email": ["zhangxm@example.com"], "tel": ["+86 138-0000-1234"], "address": [{ "city": "北京", "country": "中国", "phone": "+86 138-0000-1234", "postalCode": "100000", "region": "北京市" }], "icon": [Blob] // 联系人头像的Blob对象 } ]
以上为 Contact Picker API 返回数据的典型结构。name/tel/email/address 均为数组类型(一个联系人可有多个号码或邮箱)。
浏览器兼容性
浏览器桌面端移动端
Chrome ⚠️
Edge ⚠️
Safari
Firefox
Android WebView
✅ 支持   ⚠️ 需启用实验性标志   ❌ 不支持
数据来源:MDN Web Docs & Can I Use
常见问题与知识点
Contact Picker API 是一个现代浏览器 Web API,允许网页在用户明确授权后,从设备系统通讯录中选取联系人信息。它是一个异步的、需要用户手势触发的API,强调隐私保护——网页只能获取用户主动选择的联系人数据,无法静默读取整个通讯录。该API通过 navigator.contacts.select() 方法工作。
可能的原因包括:
浏览器不支持:目前仅 Chromium 内核浏览器(Chrome 80+)在 Android 移动端完整支持;
非安全上下文:Contact Picker API 要求页面通过 HTTPS 或 localhost 访问(window.isSecureContext === true);
桌面端限制:桌面端 Chrome 默认关闭此功能,需在 chrome://flags 中启用 #enable-experimental-web-platform-features
非用户手势触发:API 必须在点击、触摸等用户交互事件中调用,不能在页面加载时自动执行。
Contact Picker API 采用用户主动授权模型
• 网页声明需要的属性(如姓名、电话),但无权决定获取哪些联系人或获取多少
• 浏览器弹出系统级联系人选择器,由用户手动挑选;
• 网页仅收到用户所选联系人的信息,无法遍历通讯录;
• 每次调用都需要用户重新授权,无法持久化访问权限;
• API 返回的数据是临时的,浏览器不会缓存或存储。
可请求的属性(第一个参数,数组):
'name' — 联系人姓名(返回 ContactName 数组)
'tel' — 电话号码(返回字符串数组)
'email' — 邮箱地址(返回字符串数组)
'address' — 邮寄地址(返回 ContactAddress 数组)
'icon' — 联系人头像(返回 Blob 数组)

可选配置(第二个参数,对象):
{ multiple: true } — 允许用户选择多个联系人,默认false为单选。
当用户在弹出的联系人选择器中点击"取消"时,select() 方法通常返回一个空数组 [](而非抛出异常)。建议在代码中同时处理这两种情况:
try { const contacts = await navigator.contacts.select(props, opts); if (contacts.length === 0) { /* 用户取消 */ } } catch (err) { /* 真正的错误,如权限问题 */ }
常见的异常类型包括 AbortError(用户取消,部分浏览器抛出)、SecurityError(非安全上下文)等。
典型应用场景包括:
表单自动填充:在收货地址、发票信息等表单中快速填入联系人数据;
邀请/分享功能:从通讯录中选择好友发送邀请链接或分享内容;
PWA应用:渐进式Web应用中集成系统级联系人选取体验;
CRM工具:快速导入客户联系方式;
会议邀请:从通讯录添加参会人员。相比传统方式,该API无需申请宽泛的通讯录权限,用户体验更友好、隐私更安全。