|
1 | | -#### 如何扩展一个新的视图? |
| 1 | +## 了解视图 |
| 2 | + |
| 3 | +HBuilderX支持创建完全自定义的、可以间接和nodejs通信的特殊网页,即视图。 |
| 4 | + |
| 5 | +使用视图可以构建复杂的、支持本地文件操作的用户界面。 |
| 6 | + |
| 7 | +设计糟糕的视图也很容易让人感觉不舒适,不能让人家一看就觉得你这是一张网页,`好看`、跟`HBuilderX风格统一`的UI也很重要。 |
2 | 8 |
|
3 | 9 |
|
4 | | - |
5 | | -[扩展一个新的 TreeView](#TreeView) |
6 | | - |
7 | 10 | [扩展一个新的 WebView](#WebView) |
| 11 | + |
| 12 | +[扩展一个新的 TreeView](#TreeView) |
| 13 | + |
| 14 | +## WebView |
| 15 | + |
| 16 | +`从HBuilderX 2.8.1及以上版本开始支持` |
| 17 | + |
| 18 | +扩展一个新的 WebView `视图`(view)通过以下2个步骤: |
| 19 | + |
| 20 | +- 通过 <a href="/ExtensionDocs/ContributionPoints/README?id=viewscontainers" target="_blank">viewContainers</a> 和 <a href="/ExtensionDocs/ContributionPoints/README?id=views" target="_blank">views</a>配置扩展点声明要扩展的`视图` |
| 21 | + |
| 22 | + |
| 23 | +``` json |
| 24 | +//package.json; |
| 25 | +//...NOTE:package.json不支持注释,以下代码使用时需要将注释删掉 |
| 26 | + "contributes": { |
| 27 | + "viewsContainers": { |
| 28 | + "rightside": [{ |
| 29 | + "id": "WebViewcontainerId", |
| 30 | + "title": "webview 展示" |
| 31 | + }] |
| 32 | + }, |
| 33 | + "views": { |
| 34 | + "WebViewcontainerId": [{ |
| 35 | + "id": "extension.WebView", |
| 36 | + "title": "webview - 展示" |
| 37 | + }] |
| 38 | + }, |
| 39 | + ... |
| 40 | + } |
| 41 | +``` |
| 42 | + |
| 43 | +- 在插件激活时通过API:<a href="/ExtensionDocs/Api/README?id=createwebview" target="_blank">window.createWebView</a>实现上面扩展的`视图` |
| 44 | + |
| 45 | +``` javascript |
| 46 | +const hx = require('hbuilderx'); |
| 47 | + |
| 48 | +/** |
| 49 | + * @description 显示webview |
| 50 | + */ |
| 51 | +function showWebView(webviewPanel) { |
| 52 | + let webview = webviewPanel.webView; |
| 53 | + |
| 54 | + var background = ''; |
| 55 | + |
| 56 | + let config = hx.workspace.getConfiguration(); |
| 57 | + let colorScheme = config.get('editor.colorScheme'); |
| 58 | + if (colorScheme == 'Monokai') { |
| 59 | + background = 'rgb(39,40,34)' |
| 60 | + } else if (colorScheme == 'Atom One Dark') { |
| 61 | + background = 'rgb(40,44,53)' |
| 62 | + } else { |
| 63 | + background = 'rgb(255,250,232)' |
| 64 | + }; |
| 65 | + |
| 66 | + webview.html = |
| 67 | + ` |
| 68 | + <body style="background-color:${background};border:1px solid ${background};"> |
| 69 | + <div style="max-width:200px;"> |
| 70 | + <img src="https://download1.dcloud.net.cn/uploads/images/hbuilderx/hx_desc@1x.png" style="position: absolute;bottom: 0;left: 0;right: 0;width: 100%;margin: auto;"> |
| 71 | + </div> |
| 72 | + <script> |
| 73 | + // 以下两种写法等同 |
| 74 | + hbuilderx.onDidReceiveMessage((msg) => {}); |
| 75 | + window.addEventListener("message", (msg) => {}); |
| 76 | + hbuiderx.postMessage({ |
| 77 | + command: 'alert', |
| 78 | + text: 'HelloWorld' |
| 79 | + }); |
| 80 | + </script> |
| 81 | + </body> |
| 82 | + `; |
| 83 | + |
| 84 | + // 插件发送消息(可以被JSON化的数据)到webview |
| 85 | + webview.postMessage({ |
| 86 | + command: "test" |
| 87 | + }); |
| 88 | + |
| 89 | + // 插件接收webview发送的消息(可以被JSON化的数据) |
| 90 | + webview.onDidReceiveMessage((msg) => { |
| 91 | + if (msg.command == 'alert') { |
| 92 | + hx.window.showInformationMessage(msg.text); |
| 93 | + } |
| 94 | + }); |
| 95 | +}; |
| 96 | + |
| 97 | + |
| 98 | +module.exports = { |
| 99 | + showWebView |
| 100 | +} |
| 101 | +``` |
| 102 | + |
| 103 | +> 扩展后的`视图`可通过菜单`视图`-`显示扩展视图`打开 |
| 104 | +
|
| 105 | +#### 效果图 |
| 106 | + |
| 107 | +<img src="/static/snapshots/webview.png" style="zoom:50%" /> |
8 | 108 |
|
9 | | -##### TreeView |
| 109 | +## TreeView |
10 | 110 | `从HBuilderX 2.7.12及以上版本开始支持` |
11 | 111 |
|
12 | 112 | 扩展一个新的 TreeView `视图`(view)通过以下2个步骤: |
13 | 113 |
|
14 | | -- 通过 [viewContainers](/ExtensionDocs/ContributionPoints/README.md#viewContainers) 和 [views](/ExtensionDocs/ContributionPoints/README.md#views) 配置扩展点声明要扩展的`视图` |
| 114 | +- 通过 <a href="/ExtensionDocs/ContributionPoints/README?id=viewscontainers" target="_blank">viewContainers</a> 和 <a href="/ExtensionDocs/ContributionPoints/README?id=views" target="_blank">views</a>配置扩展点声明要扩展的`视图` |
15 | 115 |
|
16 | 116 |
|
17 | 117 | ``` json |
|
34 | 134 | } |
35 | 135 | ``` |
36 | 136 |
|
37 | | -- 在插件激活时通过API:[window.createTreeView](/ExtensionDocs/Api/README.md#createTreeView)实现上面扩展的`视图` |
| 137 | +- 在插件激活时通过API:<a href="/ExtensionDocs/Api/README?id=createtreeview" target="_blank">window.createTreeView</a>实现上面扩展的`视图` |
38 | 138 |
|
39 | 139 | ``` javascript |
40 | 140 | // extension.js |
@@ -118,92 +218,3 @@ module.exports = { |
118 | 218 |
|
119 | 219 | <img src="/static/snapshots/view@2x.png" style="zoom:50%" /> |
120 | 220 |
|
121 | | -##### WebView |
122 | | -`从HBuilderX 2.8.1及以上版本开始支持` |
123 | | - |
124 | | -扩展一个新的 WebView `视图`(view)通过以下2个步骤: |
125 | | - |
126 | | -- 通过 [viewContainers](/ExtensionDocs/ContributionPoints/README.md#viewContainers) 和 [views](/ExtensionDocs/ContributionPoints/README.md#views) 配置扩展点声明要扩展的`视图` |
127 | | - |
128 | | - |
129 | | -``` json |
130 | | -//package.json; |
131 | | -//...NOTE:package.json不支持注释,以下代码使用时需要将注释删掉 |
132 | | - "contributes": { |
133 | | - "viewsContainers": { |
134 | | - "rightside": [{ |
135 | | - "id": "WebViewcontainerId", |
136 | | - "title": "webview 展示" |
137 | | - }] |
138 | | - }, |
139 | | - "views": { |
140 | | - "WebViewcontainerId": [{ |
141 | | - "id": "extension.WebView", |
142 | | - "title": "webview - 展示" |
143 | | - }] |
144 | | - }, |
145 | | - ... |
146 | | - } |
147 | | -``` |
148 | | - |
149 | | -- 在插件激活时通过API:[window.createWebView](/ExtensionDocs/Api/README.md#createWebView)实现上面扩展的`视图` |
150 | | - |
151 | | -``` javascript |
152 | | -const hx = require('hbuilderx'); |
153 | | - |
154 | | -/** |
155 | | - * @description 显示webview |
156 | | - */ |
157 | | -function showWebView(webviewPanel) { |
158 | | - let webview = webviewPanel.webView; |
159 | | - |
160 | | - var background = ''; |
161 | | - |
162 | | - let config = hx.workspace.getConfiguration(); |
163 | | - let colorScheme = config.get('editor.colorScheme'); |
164 | | - if (colorScheme == 'Monokai') { |
165 | | - background = 'rgb(39,40,34)' |
166 | | - } else if (colorScheme == 'Atom One Dark') { |
167 | | - background = 'rgb(40,44,53)' |
168 | | - } else { |
169 | | - background = 'rgb(255,250,232)' |
170 | | - }; |
171 | | - |
172 | | - webview.html = |
173 | | - ` |
174 | | - <body style="background-color:${background};border:1px solid ${background};"> |
175 | | - <div style="max-width:200px;"> |
176 | | - <img src="https://download1.dcloud.net.cn/uploads/images/hbuilderx/hx_desc@1x.png" style="position: absolute;bottom: 0;left: 0;right: 0;width: 100%;margin: auto;"> |
177 | | - </div> |
178 | | - <script> |
179 | | - // 以下两种写法等同 |
180 | | - hbuilderx.onDidReceiveMessage((msg) => {}); |
181 | | - window.addEventListener("message", (msg) => {}); |
182 | | - hbuiderx.postMessage({ |
183 | | - command: 'alert', |
184 | | - text: 'HelloWorld' |
185 | | - }); |
186 | | - </script> |
187 | | - </body> |
188 | | - `; |
189 | | - webview.postMessage({ |
190 | | - command: "test" |
191 | | - }); |
192 | | - webview.onDidReceiveMessage((msg) => { |
193 | | - if (msg.command == 'alert') { |
194 | | - hx.window.showInformationMessage(msg.text); |
195 | | - } |
196 | | - }); |
197 | | -}; |
198 | | - |
199 | | - |
200 | | -module.exports = { |
201 | | - showWebView |
202 | | -} |
203 | | -``` |
204 | | - |
205 | | -> 扩展后的`视图`可通过菜单`视图`-`显示扩展视图`打开 |
206 | | -
|
207 | | -#### 效果图 |
208 | | - |
209 | | -<img src="/static/snapshots/webview.png" style="zoom:50%" /> |
|
0 commit comments