<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link
rel="icon"
href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🎉</text></svg>"
/>
<title>How to access contacts from the address book</title>
</head>
<body>
<h1>How to access contacts from the address book</h1>
<p>Ship your order as a present to a friend.</p>
<button hidden type="button">Open address book</button>
<pre></pre>
<label> Name <input class="name" autocomplete="name"></label>
<label hidden>Address <input class="address" required></label>
<label>Street <input class="autofill" autocomplete="address-line1" required></label>
<label>City <input class="autofill" autocomplete="address-level2" required></label>
<label>State / Province / Region (optional) <input class="autofill" autocomplete="address-level1"></label>
<label>ZIP / Postal code (optional) <input class="autofill" autocomplete="postal-code"></label>
<label>Country <input class="autofill" autocomplete="country"></label>
<label>Email<input class="email" autocomplete="email"></label>
<label>Telephone<input class="tel" autocomplete="tel"></label>
</body>
</html>
html {
box-sizing : border-box ;
font-family : system-ui , sans-serif ;
color-scheme : dark light ;
}
*, * : before , * : after {
box-sizing : inherit ;
}
body {
margin : 1 rem ;
}
input {
display : block ;
margin-block-end : 1 rem ;
}
const button = document . querySelector ( 'button' );
const name = document . querySelector ( '.name' )
const address = document . querySelector ( '.address' )
const email = document . querySelector ( '.email' )
const tel = document . querySelector ( '.tel' )
const pre = document . querySelector ( 'pre' )
const autofills = document . querySelectorAll ( '.autofill' )
if ( 'contacts' in navigator ) {
button . hidden = false ;
for ( const autofill of autofills ) {
autofill . parentElement . style . display = 'none'
}
address . parentElement . style . display = 'block' ;
button . addEventListener ( 'click' , async () => {
const props = [ 'name' , 'email' , 'tel' , 'address' ];
const opts = { multiple : false };
try {
const [ contact ] = await navigator . contacts . select ( props , opts );
name . value = contact . name ;
address . value = contact . address ;
tel . value = contact . tel
email . value = contact . email ;
} catch ( err ) {
pre . textContent = ` ${ err . name } : ${ err . message } `
}
});
}
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License , and code samples are licensed under the Apache 2.0 License . For details, see the Google Developers Site Policies . Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2023-07-05 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2023-07-05 UTC."],[],[]]