summaryrefslogtreecommitdiffstats
path: root/chrome/common/extensions/docs/templates/articles/app_intents.html
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/common/extensions/docs/templates/articles/app_intents.html')
-rw-r--r--chrome/common/extensions/docs/templates/articles/app_intents.html225
1 files changed, 225 insertions, 0 deletions
diff --git a/chrome/common/extensions/docs/templates/articles/app_intents.html b/chrome/common/extensions/docs/templates/articles/app_intents.html
new file mode 100644
index 0000000..533fb15
--- /dev/null
+++ b/chrome/common/extensions/docs/templates/articles/app_intents.html
@@ -0,0 +1,225 @@
+<h1>Connect Apps with Web Intents</h1>
+
+
+<p>
+<a href="http://webintents.org/">Web Intents</a>
+allow your application to quickly communicate
+with other applications on the user's system and inside their browser.
+Your application can register to handle specific user actions
+such as editing images via the <code>manifest.json</code>;
+your application can also invoke actions to be handled by other applications.
+</p>
+
+<p>Pacakged apps use Web Intents as their primary mechanism for inter-app
+communication.</p>
+
+<p class="note">
+<b>API Samples: </b>
+Want to play with the code?
+Check out the
+<a href="https://github.com/GoogleChrome/chrome-app-samples/tree/master/webintents">webintents</a> sample.
+</p>
+
+<h2 id="register">Register your app to handle an action</h2>
+
+<p>
+You must supply the intent in the manifest:
+</p>
+
+<pre>
+"intents":{
+ "http://webintents.org/edit" : [{
+ "title" : "Best Image editing app",
+ "type" : ["image/*"]
+ }]
+}
+</pre>
+
+<p>
+Unlike extensions and hosted apps, packaged applications do not
+need a "href" attribute in the manifest declaration, this is
+because packaged apps have a single entry point for
+launch - the <code>onLaunched</code> event.
+</p>
+
+<h2 id="content">Handling content types</h2>
+
+<p>
+Your application can be the user's preferred choice for handling a file type.
+For example, your application could handle viewing images or viewing pdfs.
+You must supply the intent in the manifest
+and use the "http://webintents.org/view" action:
+</p>
+<p>To be able declare your application's ability to view RSS and ATOM
+feeds, you would add the following to your manifest.
+</p>
+<pre>
+"intents": {
+ "http://webintents.org/view" : [{
+ "title" : "RSS Feed Reader",
+ "type" : ["application/atom+xml", "application/rss+xml"]
+ }]
+}
+</pre>
+
+<p>
+Your application will receive intent payload through the <code>onLaunched</code> event.
+</p>
+<pre>
+chrome.app.runtime.onLaunched(function(intent) {
+ // App Launched
+ if(intent.action == "http://webinents.org/view" &amp;&amp;
+ intent.type == "application/atom+xml") {
+
+ // obtain the ATOM feed data.
+ var data = intent.data;
+ }
+});
+</pre>
+
+
+<h2 id="launching">Launching an app with a file</h2>
+<p>
+If your app handles the <code>view</code> intent,
+it is possible to launch it from the command line with a file as a parameter.
+</p>
+<pre>
+chrome.exe --app-id [app_id] [path_to_file]
+</pre>
+<p>
+This will implicity launch your application with an intent payload populated
+with the action set to "http://webintents.org/view", the type set to the
+mime-type of the file and the data as a <code>FileEntry</code> object.
+</p>
+<pre>
+chrome.app.runtime.onLaunched(function(intent) {
+ // App Launched
+ var data = intent.data;
+});
+</pre>
+
+<h2 id="launching">Manipulating the file</h2>
+<p>
+ When your application is launched with a file as the parameter
+ on the command-line,
+ the <code>intent.data</code> property is a <code>FileEntry</code>.
+ This is really cool because now you have a direct reference back to the physical
+ file on the disk,
+ and you can write data back to it.
+</p>
+
+<pre>
+chrome.app.runtime.onLaunched(function(intent) {
+ // App Launched
+ var data = intent.data;
+ if(data instanceof FileEntry) {
+ data.createWriter(function(writer) {
+ writer.onwriteend = function(e) {
+ console.log('Write completed.');
+ };
+
+ writer.onerror = function(e) {
+ console.log('Write failed: ' + e.toString());
+ };
+
+ // Create a new Blob and write it to log.txt.
+ var bb = new BlobBuilder(); // Note: window.WebKitBlobBuilder in Chrome 12.
+ bb.append('Lorem Ipsum');
+ writer.write(bb.getBlob('text/plain'));
+ });
+ }
+});
+</pre>
+
+<h2 id="return">Returning data to calling application</h2>
+<p>
+Lots of applications want to cooperate
+with the app that invoked them.
+It's easy to send data back to the calling client
+using <code>intent.postResult</code>:
+</p>
+
+<pre>
+chrome.app.runtime.onLaunched(function(intent) {
+ // App Launched
+ console.log(intent.action);
+ console.log(intent.type);
+ var data = intent.data;
+ // Do something with the data;
+
+ intent.postResult(newData);
+});
+</pre>
+
+<h2 id="localize">Localizing your app title</h2>
+
+<p>
+If your application or extension is localized
+as per the guidelines in
+<a href="i18n.html">Internationalization (i18n)</a>,
+you can localize the title of your intent in the picker
+using the exact same infrastructure:
+</p>
+
+<pre>
+"intents": {
+ "http://webintents.org/edit" : [{
+ "title" : "__MSG_intent_title__",
+ "type" : ["image/*"],
+ "disposition" : "inline"
+ }]
+}
+</pre>
+
+<h2 id="invoke">Invoking an action</h2>
+<p>
+If your application needs to be able
+to use the functionality of another application,
+it can simply ask the browser for it.
+To ask for an application that supports image editing,
+it's as simple as:
+</p>
+
+<pre>
+var intent = new WebKitIntent("http://webintents.org/edit", "image/png", "dataUri://");
+
+window.navigator.webkitStartActivity(intent, function(data) {
+// The data from the remote application is returned here.
+});
+</pre>
+
+<h2 id="errors">Handling Errors and Exceptions</h2>
+<p>
+ If your service application needs to signal to the client application
+ that an unrecoverable error has occurred,
+ then your application will need
+ to call <code>postError</code> on the intent object.
+ This will signal to the client’s onError callback
+ that something has gone wrong.
+</p>
+
+<h3>Client</h3>
+
+<pre>
+var intent = new WebKitIntent("http://webintents.org/edit", "image/png", "dataUri://");
+
+var onSuccess = function(data) {};
+var onError = function() {};
+
+window.navigator.webkitStartActivity(intent, onSuccess, onError);
+</pre>
+
+<h3>Service</h3>
+<pre>
+chrome.app.runtime.onLaunched(function(intent) {
+ // App Launched
+ console.log(intent.action);
+ console.log(intent.type);
+ var data = intent.data;
+ // Do something with the data;
+
+ intent.postResult(newData);
+});
+</pre>
+
+<p class="backtotop"><a href="#top">Back to top</a></p> \ No newline at end of file