WebIntents/ContactsAPI
Registration
This is assuming the new schema.org usage:
<intent action="http://webintents.org/pick" type="http://schema.org/Person http://schema.org/Organization" encoding="application/json" ></intent>
Client
This is assuming the new schema.org usage, but that we haven't yet switched to object literals.
var intent = new Intent("http://webintents.org/pick", "http://schema.org/Person", "application/json", null, null, { filter: "Bob", fields: ["name", "emails", "birthday"]}); navigator.startActivity(intent, gotContacts); function gotContacts (data) { console.log(data); // logs an array of contacts as selected }
The same using object literal:
var intent = new Intent({ action: "http://webintents.org/pick", type: "http://schema.org/Person", encoding: "application/json", extras: { filter: "Bob", fields: ["name", "emails", "birthday"]}});
Discussion
Actually the above makes use of encoding "application/json" when it really means that the client expects to get a JS object (in this case an array) which is a structured clone of the contact information. Presumably an alternative would be to use encoding "text/vcard" and get a blob of a vcard (or possibly a string in this case).
I think that that's wrong because in one case we're getting a blob of vcard and in the other we're getting an in-memory structure, when in fact we logically should be getting a blob of JSON — JSON is being treated specially. Furthermore, if the fields had included pictures, ideally we'd want them to be Blobs where in fact if they were application/json they'd have to be serialised as data URIs (or some similar option). So the application/json is a lie.
Alternative proposal: when no encoding parameter is specified, this means that a structured clone will always be passed. When the encoding is passed, it means that a Blob (or array of Blobs?) will always be passed. This leads to this alternative variant (that is both more semantically correct and shorter):
<intent action="http://webintents.org/pick" type="http://schema.org/Person http://schema.org/Organization" ></intent>
var intent = new Intent({ action: "http://webintents.org/pick", type: "http://schema.org/Person", extras: { filter: "Bob", fields: ["name", "emails", "birthday"]}});