| OLD | NEW |
| 1 <h1>Options</h1> | 1 <h1>Options</h1> |
| 2 | 2 |
| 3 <p class="warning"> | 3 <p class="warning"> |
| 4 This new way of writing options is only supported from Chrome 40 onwards. | 4 This new way of writing options is only supported from Chrome 40 onwards. |
| 5 <a href="options">See the old documentation</a>, or you can | 5 <a href="options">See the old documentation</a>, or you can |
| 6 <a href="#migration">start migrating now</a>. | 6 <a href="#migration">start migrating now</a>. |
| 7 </p> | 7 </p> |
| 8 | 8 |
| 9 <p> | 9 <p> |
| 10 To allow users to customize the behavior of your extension, you may wish to | 10 To allow users to customize the behavior of your extension, you may wish to |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 127 | 127 |
| 128 <h2 id="considerations">Considerations</h2> | 128 <h2 id="considerations">Considerations</h2> |
| 129 | 129 |
| 130 <p> | 130 <p> |
| 131 Options pages embedded inside <em>chrome://extensions</em> have some subtle | 131 Options pages embedded inside <em>chrome://extensions</em> have some subtle |
| 132 behavior you should consider while writing them, mostly caused by not being | 132 behavior you should consider while writing them, mostly caused by not being |
| 133 hosted inside their own tabs. | 133 hosted inside their own tabs. |
| 134 </p> | 134 </p> |
| 135 | 135 |
| 136 <h3 id="linking">Linking to your options page</h3> | 136 <h3 id="linking">Linking to your options page</h3> |
| 137 |
| 137 <p> | 138 <p> |
| 138 To link to your extension's options page, use a URL like | 139 If you want to link to your options page, call |
| 139 <em style="white-space:nowrap">chrome://extensions<strong>?options=yourextension
id</strong></em>. | 140 <code>$(ref:runtime.openOptionsPage chrome.runtime.openOptionsPage())</code>. |
| 140 This loads <em>chrome://extensions</em> then automatically opens your options | 141 This has been available since Chrome 42. |
| 141 page in a dialogue. | |
| 142 | |
| 143 <pre data-filename="popup.html"> | |
| 144 <a href="chrome://extensions?options=aebdgjojlaaljcehfkjaknmlilmblnip"> | |
| 145 Go to options. | |
| 146 </a> | |
| 147 </pre> | |
| 148 </p> | 142 </p> |
| 149 | 143 |
| 150 <p> | 144 <p> |
| 151 Of course, this is only supported in Chrome 40 onwards. | 145 Linking directly to |
| 146 <em style="white-space:nowrap">chrome-extension://<strong>yourextensionid/yourop
tionspage.html</strong></em> |
| 147 will be a bad user experience. Linking directly to |
| 148 <em style="white-space:nowrap">chrome://extensions<strong>?options=yourextension
id</strong></em> |
| 149 isn't advisable either, as Chrome may change the embedding URL in the future. |
| 150 |
| 151 <p> |
| 152 <code>$(ref:runtime.openOptionsPage chrome.runtime.openOptionsPage())</code> |
| 153 will always open the canonical location, and has nice behavior like re-focusing |
| 154 an open options page if there is one. |
| 152 </p> | 155 </p> |
| 153 | 156 |
| 154 <p> | 157 <pre data-filename="popup.html"> |
| 155 If you link to your options page directly with <em | 158 <button id="go-to-options">Go to options</button> |
| 156 style="white-space:nowrap">chrome-extension://<strong>yourextensionid/youroption
spage.html</strong></em>, | 159 </pre> |
| 157 it will always open in its own tab. This is a bad user experience (but it can | 160 <pre data-filename="popup.js"> |
| 158 be useful in development). | 161 document.querySelector('#go-to-options').addEventListener(function() { |
| 159 </p> | 162 if (chrome.runtime.openOptionsPage) { |
| 163 // New way to open options pages, if supported (Chrome 42+). |
| 164 chrome.runtime.openOptionsPage(); |
| 165 } else { |
| 166 // Reasonable fallback. |
| 167 window.open(chrome.runtime.getURL('options.html')); |
| 168 } |
| 169 }); |
| 170 </pre> |
| 160 | 171 |
| 161 <h3 id="tabs-api">Tabs API</h3> | 172 <h3 id="tabs-api">Tabs API</h3> |
| 162 <p> | 173 <p> |
| 163 Options page code cannot assume that it's hosted inside a tab, and this may | 174 Options page code cannot assume that it's hosted inside a tab, and this may |
| 164 affect how the $(ref:tabs Tabs API) can be used. For example, | 175 affect how the $(ref:tabs Tabs API) can be used. For example, |
| 165 <ul> | 176 <ul> |
| 166 <li>$(ref:tabs.query) will never find a tab with your extension's options | 177 <li>$(ref:tabs.query) will never find a tab with your extension's options |
| 167 page URL.</li> | 178 page URL.</li> |
| 168 <li>$(ref:tabs.onCreated) will not fire when your options page is | 179 <li>$(ref:tabs.onCreated) will not fire when your options page is |
| 169 opened.</li> | 180 opened.</li> |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 <p> | 252 <p> |
| 242 If you specify both, Chrome 40 and onwards will ignore the value of | 253 If you specify both, Chrome 40 and onwards will ignore the value of |
| 243 <code>options_page</code>. | 254 <code>options_page</code>. |
| 244 </p> | 255 </p> |
| 245 <p> | 256 <p> |
| 246 In a future version of Chrome, any extension which specifies | 257 In a future version of Chrome, any extension which specifies |
| 247 <code>options_page</code> will change to match the <code>options_ui</code> | 258 <code>options_page</code> will change to match the <code>options_ui</code> |
| 248 behavior - most importantly, they will always be embedded in | 259 behavior - most importantly, they will always be embedded in |
| 249 <em>chrome://extensions</em> - so migrate as soon as possible. | 260 <em>chrome://extensions</em> - so migrate as soon as possible. |
| 250 </p> | 261 </p> |
| OLD | NEW |