files/en-us/web/api/contactsmanager/select/index.md
{{securecontext_header}}{{APIRef("Contact Picker API")}}{{SeeCompatTable}}
The select() method of the
{{domxref("ContactsManager")}} interface returns a {{jsxref('Promise')}} which, when
resolved, presents the user with a contact picker which allows them to select contact(s)
they wish to share. This method requires a user gesture for the {{jsxref('Promise')}} to
resolve.
select(properties)
select(properties, options)
properties
'name': The contact's name.'tel': The telephone number(s) of the contact.'email': The email address of the contact.'address': The contact's postal address.'icon': The avatar of the contact.options {{optional_inline}}
multiple
false.Returns a {{jsxref('Promise')}} that resolves with an array of objects containing contact information. Each object represents a single contact may contain the following properties:
address
email
icon
name
tel
InvalidStateError {{domxref("DOMException")}}
SecurityError {{domxref("DOMException")}}
properties is empty, or if any of the specified properties are not
supported.{{Glossary("Transient activation")}} is required. The user has to interact with the page or a UI element in order for this feature to work.
The following example sets an array of properties to be retrieved for each contact, as well as setting an options object to allow for multiple contacts to be selected.
An asynchronous function is then defined which uses the select() method to
present the user with a contact picker interface and handle the chosen results.
handleResults() is a developer defined function.
const props = ["name", "email", "tel", "address", "icon"];
const opts = { multiple: true };
async function getContacts() {
try {
const contacts = await navigator.contacts.select(props, opts);
handleResults(contacts);
} catch (ex) {
// Handle any errors here.
}
}
The following example uses {{domxref("ContactsManager.getProperties", "getProperties()")}} to ensure that only supported properties are passed. Otherwise, select() might throw a {{jsxref("TypeError")}}. handleResults() is a developer defined function.
const supportedProperties = await navigator.contacts.getProperties();
async function getContacts() {
try {
const contacts = await navigator.contacts.select(supportedProperties);
handleResults(contacts);
} catch (ex) {
// Handle any errors here.
}
}
{{Specifications}}
{{Compat}}