Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1104)

Side by Side Diff: chrome/common/extensions/docs/templates/articles/app_codelab_webview.html

Issue 647763004: Clean-up Chrome Apps codelab. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/common/extensions/docs/templates/articles/app_codelab_intro.html ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 <h1 id="add-webview"> 1 <h1 id="add-webview">
2 <span class="h1-step">Step 4:</span> 2 <span class="h1-step">Step 4:</span>
3 Open External Links With a Webview 3 Open External Links With a Webview
4 </h1> 4 </h1>
5 5
6 <p class="note"> 6 <p class="note">
7 <strong>Want to start fresh from here?</strong> 7 <strong>Want to start fresh from here?</strong>
8 Find the previous step's code in the <a href="https://github.com/mangini/io13- codelab/archive/master.zip">reference code zip</a> under <strong><em>cheat_code > solution_for_step3</strong></em>. 8 Find the previous step's code in the <a href="https://github.com/mangini/io13- codelab/archive/master.zip">reference code zip</a> under <strong><em>cheat_code > solution_for_step3</strong></em>.
9 </p> 9 </p>
10 10
(...skipping 14 matching lines...) Expand all
25 <p>Some applications need to present external web content directly to the user b ut 25 <p>Some applications need to present external web content directly to the user b ut
26 keep them inside the application experience. For example, a news aggregator 26 keep them inside the application experience. For example, a news aggregator
27 might want to embed the news from external sites with all the formatting, images , 27 might want to embed the news from external sites with all the formatting, images ,
28 and behavior of the original site. For these and other usages, Chrome Apps have 28 and behavior of the original site. For these and other usages, Chrome Apps have
29 a custom HTML tag called <a href="/apps/tags/webview">webview</a>.</p> 29 a custom HTML tag called <a href="/apps/tags/webview">webview</a>.</p>
30 30
31 <figure> 31 <figure>
32 <img src="{{static}}/images/app_codelab/webview-example.png" alt="The Todo app using a webview"> 32 <img src="{{static}}/images/app_codelab/webview-example.png" alt="The Todo app using a webview">
33 </figure> 33 </figure>
34 34
35 <p class="note">A webview is a sandboxed process. For example, the enclosing Chr ome App 35 <p class="note"><strong>Webviews are sandboxed processes:</strong>
36 (also known as the "embedder page") cannot easily access the webview's loaded DO M. 36 The enclosing Chrome App (also known as the "embedder page")
37 cannot easily access the webview's loaded DOM.
37 You can only interact with the webview using its API.</p> 38 You can only interact with the webview using its API.</p>
38 39
39 <h2 id="implement-webview">Implement the webview tag</h2> 40 <h2 id="implement-webview">Implement the webview tag</h2>
40 41
41 <p>Let's update our Todo app to search for URLs in the todo item text 42 <p>Update the Todo app to search for URLs in the todo item text and create a hyp erlink.
42 in order to create a hyperlink. The link, when clicked, will open a new Chrome A pp window 43 The link, when clicked, opens a new Chrome App window
43 (not a browser tab) with a webview presenting the content.</p> 44 (not a browser tab) with a webview presenting the content.</p>
44 45
45 <h3 id="update-permissions">Update permissions</h3> 46 <h3 id="update-permissions">Update permissions</h3>
46 47
47 <p>In <strong><em>manifest.json</em></strong>, request the <code>webview</code> permission:</p> 48 <p>In <strong><em>manifest.json</em></strong>, request the <code>webview</code> permission:</p>
48 49
49 <pre data-filename="manifest.json"> 50 <pre data-filename="manifest.json">
50 "permissions": ["storage", "alarms", "notifications"<b>, "webview"</b>], 51 "permissions": ["storage", "alarms", "notifications"<b>, "webview"</b>],
51 </pre> 52 </pre>
52 53
(...skipping 26 matching lines...) Expand all
79 <b>Controller.prototype._parseForURLs = function (text) {</b> 80 <b>Controller.prototype._parseForURLs = function (text) {</b>
80 <b> var re = /(https?:\/\/[^\s"&lt;&gt;,]+)/g;</b> 81 <b> var re = /(https?:\/\/[^\s"&lt;&gt;,]+)/g;</b>
81 <b> return text.replace(re, '&lt;a href="$1" data-src="$1"&gt;$1&lt;/a&gt;'); </b> 82 <b> return text.replace(re, '&lt;a href="$1" data-src="$1"&gt;$1&lt;/a&gt;'); </b>
82 <b>};</b> 83 <b>};</b>
83 84
84 // Export to window 85 // Export to window
85 window.app.Controller = Controller; 86 window.app.Controller = Controller;
86 })(window); 87 })(window);
87 </pre> 88 </pre>
88 89
89 <p>Whenever a string starting with "http://" or "https://" is found, a HTML anch or tag will be created to wrap around the URL.</p> 90 <p>Whenever a string starting with "http://" or "https://" is found, a HTML anch or tag is created to wrap around the URL.</p>
90 91
91 <h3 id="render-links">Render hyperlinks in the todo list</h3> 92 <h3 id="render-links">Render hyperlinks in the todo list</h3>
92 93
93 <p>Find <code>showAll()</code> in <em>controller.js</em>. Update <code>showAll() </code> 94 <p>Find <code>showAll()</code> in <em>controller.js</em>. Update <code>showAll() </code>
94 to parse for links by using the <code>_parseForURLs()</code> method that we adde d previously:</p> 95 to parse for links by using the <code>_parseForURLs()</code> method added previo usly:</p>
95 96
96 <pre data-filename="controller.js"> 97 <pre data-filename="controller.js">
97 /** 98 /**
98 * An event to fire on load. Will get all items and display them in the 99 * An event to fire on load. Will get all items and display them in the
99 * todo-list 100 * todo-list
100 */ 101 */
101 Controller.prototype.showAll = function () { 102 Controller.prototype.showAll = function () {
102 this.model.read(function (data) { 103 this.model.read(function (data) {
103 <strike>this.$todoList.innerHTML = this.view.show(data);</strike> 104 <strike>this.$todoList.innerHTML = this.view.show(data);</strike>
104 <b>this.$todoList.innerHTML = this._parseForURLs(this.view.show(data));</b> 105 <b>this.$todoList.innerHTML = this._parseForURLs(this.view.show(data));</b>
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 // ORM. If this were a real DB this would save a lot of time and would avoid 158 // ORM. If this were a real DB this would save a lot of time and would avoid
158 // a spinner gif. 159 // a spinner gif.
159 <strike>input.value = label.innerHTML;</strike> 160 <strike>input.value = label.innerHTML;</strike>
160 <b>input.value = label.innerText;</b> 161 <b>input.value = label.innerText;</b>
161 ... 162 ...
162 } 163 }
163 </pre> 164 </pre>
164 165
165 <h3 id="open-webview">Open new window containing webview</h3> 166 <h3 id="open-webview">Open new window containing webview</h3>
166 167
167 <p>Add a <code>_doShowUrl()</code> method to <em>controller.js</em>. This method will open a new Chrome App window 168 <p>Add a <code>_doShowUrl()</code> method to <em>controller.js</em>. This method opens a new Chrome App window
168 via <a href="/apps/app_window.html#method-create">chrome.app.window.create()</a> 169 via <a href="/apps/app_window.html#method-create">chrome.app.window.create()</a>
169 with <em>webview.html</em> as the window source:</p> 170 with <em>webview.html</em> as the window source:</p>
170 171
171 <pre data-filename="controller.js"> 172 <pre data-filename="controller.js">
172 Controller.prototype._parseForURLs = function (text) { 173 Controller.prototype._parseForURLs = function (text) {
173 var re = /(https?:\/\/[^\s"&lt;&gt;,]+)/g; 174 var re = /(https?:\/\/[^\s"&lt;&gt;,]+)/g;
174 return text.replace(re, '&lt;a href="$1" data-src="$1"&gt;$1&lt;/a&gt;'); 175 return text.replace(re, '&lt;a href="$1" data-src="$1"&gt;$1&lt;/a&gt;');
175 }; 176 };
176 177
177 <b>Controller.prototype._doShowUrl = function(e) {</b> 178 <b>Controller.prototype._doShowUrl = function(e) {</b>
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 227
227 <h2 id="launch">Launch your finished Todo app</h2> 228 <h2 id="launch">Launch your finished Todo app</h2>
228 229
229 <p>You are done Step 4! If you reload your app and add a todo item with a full U RL 230 <p>You are done Step 4! If you reload your app and add a todo item with a full U RL
230 starting with http:// or https://, you should see something like this:</p> 231 starting with http:// or https://, you should see something like this:</p>
231 232
232 <figure> 233 <figure>
233 <img src="{{static}}/images/app_codelab/step4-completed.gif" alt="The Todo app with webview"/> 234 <img src="{{static}}/images/app_codelab/step4-completed.gif" alt="The Todo app with webview"/>
234 </figure> 235 </figure>
235 236
236 <h2 id="recap">Recap APIs referenced in this step</h2> 237 <h2 id="recap">For more information</h2>
237 238
238 <p>For more detailed information about some of the APIs introduced in this step, refer to:</p> 239 <p>For more detailed information about some of the APIs introduced in this step, refer to:</p>
239 240
240 <ul> 241 <ul>
241 <li> 242 <li>
242 <a href="/apps/declare_permissions" title="Read 'Declare Permissions' in the Chrome developer docs">Declare Permissions</a> 243 <a href="/apps/declare_permissions" title="Read 'Declare Permissions' in the Chrome developer docs">Declare Permissions</a>
243 <a href="#update-permissions" class="anchor-link-icon" title="This feature m entioned in 'Update app permissions'">&#8593;</a> 244 <a href="#update-permissions" class="anchor-link-icon" title="This feature m entioned in 'Update app permissions'">&#8593;</a>
244 </li> 245 </li>
245 <li> 246 <li>
246 <a href="/apps/tags/webview" title="Read '&lt;webview&gt; Tag' in the Chrome developer docs">&lt;webview&gt; Tag</a> 247 <a href="/apps/tags/webview" title="Read '&lt;webview&gt; Tag' in the Chrome developer docs">&lt;webview&gt; Tag</a>
247 <a href="#overview" class="anchor-link-icon" title="This feature mentioned i n 'Learn about the webview tag'">&#8593;</a> 248 <a href="#overview" class="anchor-link-icon" title="This feature mentioned i n 'Learn about the webview tag'">&#8593;</a>
248 <a href="#create-webview" class="anchor-link-icon" title="This feature menti oned in 'Create a webview embedder page'">&#8593;</a>
249 </li> 249 </li>
250 <li> 250 <li>
251 <a href="/apps/app_window.html#method-create" title="Read 'chrome.app.window .create()' in the Chrome developer docs">chrome.app.window.create()</a> 251 <a href="/apps/app_window.html#method-create" title="Read 'chrome.app.window .create()' in the Chrome developer docs">chrome.app.window.create()</a>
252 <a href="#open-webview" class="anchor-link-icon" title="This feature mention ed in 'Open new window containing webview'">&#8593;</a> 252 <a href="#open-webview" class="anchor-link-icon" title="This feature mention ed in 'Open new window containing webview'">&#8593;</a>
253 </li> 253 </li>
254 <li>
255 <a href="/apps/tags/webview#tag" title="Read '&lt;webview&gt; Tag attributes ' in the Chrome developer docs">&lt;webview&gt; Tag attributes</a>
256 <a href="#open-webview" class="anchor-link-icon" title="This feature mention ed in 'Open new window containing webview'">&#8593;</a>
257 </li>
258 254
259 </ul> 255 </ul>
260 256
261 <p>Ready to continue onto the next step? Go to <a href="app_codelab_images.html" >Step 5 - Add images from the web &raquo;</a></p> 257 <p>Ready to continue onto the next step? Go to <a href="app_codelab_images.html" >Step 5 - Add images from the web &raquo;</a></p>
OLDNEW
« no previous file with comments | « chrome/common/extensions/docs/templates/articles/app_codelab_intro.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698