• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Class (WebController, deprecated)
2<!--Kit: ArkWeb-->
3<!--Subsystem: Web-->
4<!--Owner: @yp99ustc; @aohui; @zourongchun-->
5<!--Designer: @LongLie; @yaomingliu; @zhufenghao-->
6<!--Tester: @ghiker-->
7<!--Adviser: @HelloCrease-->
8
9通过WebController可以控制Web组件各种行为。一个WebController对象只能控制一个Web组件,且必须在Web组件和WebController绑定后,才能调用WebController上的方法。
10
11从API version 9开始不再维护,建议使用[WebviewController<sup>9+</sup>](./arkts-apis-webview-WebviewController.md)代替。
12
13> **说明:**
14>
15> - 该组件首批接口从API version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
16>
17> - 本Class首批接口从API version 8开始支持。
18>
19> - 示例效果请以真机运行为准,当前DevEco Studio预览器不支持。
20
21## 创建对象
22
23<!--deprecated_code_no_check-->
24```ts
25let webController: WebController = new WebController()
26```
27
28## constructor<sup>(deprecated)</sup>
29
30constructor()
31
32WebController的构造函数。
33
34> **说明:**
35>
36> 从API version 8开始支持,从API version 9开始废弃。并且不再提供新的接口作为替代。
37
38**系统能力:** SystemCapability.Web.Webview.Core
39
40## getCookieManager<sup>(deprecated)</sup>
41
42getCookieManager(): WebCookie
43
44获取Web组件cookie管理对象。
45
46从API version 9开始不再维护,建议使用[getCookie](./arkts-apis-webview-WebCookieManager.md#getcookiedeprecated)代替。
47
48**系统能力:** SystemCapability.Web.Webview.Core
49
50**返回值:**
51
52| 类型        | 说明                                       |
53| --------- | ---------------------------------------- |
54| WebCookie | Web组件cookie管理对象,参考[WebCookie](./arkts-basic-components-web-WebCookie.md)定义。 |
55
56**示例:**
57
58  ```ts
59  // xxx.ets
60  @Entry
61  @Component
62  struct WebComponent {
63    controller: WebController = new WebController()
64
65    build() {
66      Column() {
67        Button('getCookieManager')
68          .onClick(() => {
69            let cookieManager = this.controller.getCookieManager()
70          })
71        Web({ src: 'www.example.com', controller: this.controller })
72      }
73    }
74  }
75  ```
76
77## requestFocus<sup>(deprecated)</sup>
78
79requestFocus()
80
81使当前web页面获取焦点。
82
83从API version 9开始不再维护,建议使用[requestFocus<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#requestfocus)代替。
84
85**系统能力:** SystemCapability.Web.Webview.Core
86
87**示例:**
88
89  ```ts
90  // xxx.ets
91  @Entry
92  @Component
93  struct WebComponent {
94    controller: WebController = new WebController()
95
96    build() {
97      Column() {
98        Button('requestFocus')
99          .onClick(() => {
100            this.controller.requestFocus()
101          })
102        Web({ src: 'www.example.com', controller: this.controller })
103      }
104    }
105  }
106  ```
107
108## accessBackward<sup>(deprecated)</sup>
109
110accessBackward(): boolean
111
112当前页面是否可后退,即当前页面是否有返回历史记录。
113
114从API version 9开始不再维护,建议使用[accessBackward<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#accessbackward)代替。
115
116**系统能力:** SystemCapability.Web.Webview.Core
117
118**返回值:**
119
120| 类型      | 说明                    |
121| ------- | --------------------- |
122| boolean | 可以后退返回true,否则返回false。 |
123
124**示例:**
125
126  ```ts
127  // xxx.ets
128  @Entry
129  @Component
130  struct WebComponent {
131    controller: WebController = new WebController()
132
133    build() {
134      Column() {
135        Button('accessBackward')
136          .onClick(() => {
137            let result = this.controller.accessBackward()
138            console.info('result:' + result)
139          })
140        Web({ src: 'www.example.com', controller: this.controller })
141      }
142    }
143  }
144  ```
145
146## accessForward<sup>(deprecated)</sup>
147
148accessForward(): boolean
149
150当前页面是否可前进,即当前页面是否有前进历史记录。
151
152从API version 9开始不再维护,建议使用[accessForward<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#accessforward)代替。
153
154**系统能力:** SystemCapability.Web.Webview.Core
155
156**返回值:**
157
158| 类型      | 说明                    |
159| ------- | --------------------- |
160| boolean | 返回true表示当前页面可以前进,返回false表示当前页面不可以前进。 |
161
162**示例:**
163
164  ```ts
165  // xxx.ets
166  @Entry
167  @Component
168  struct WebComponent {
169    controller: WebController = new WebController()
170
171    build() {
172      Column() {
173        Button('accessForward')
174          .onClick(() => {
175            let result = this.controller.accessForward()
176            console.info('result:' + result)
177          })
178        Web({ src: 'www.example.com', controller: this.controller })
179      }
180    }
181  }
182  ```
183
184## accessStep<sup>(deprecated)</sup>
185
186accessStep(step: number): boolean
187
188当前页面是否可前进或者后退给定的step步。
189
190从API version 9开始不再维护,建议使用[accessStep<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#accessstep)代替。
191
192**系统能力:** SystemCapability.Web.Webview.Core
193
194**参数:**
195
196| 参数名  | 类型   | 必填  | 说明                  |
197| ---- | ------ | ---- | --------------------- |
198| step | number | 是   | 要跳转的步数,正数代表前进,负数代表后退。 |
199
200**返回值:**
201
202| 类型      | 说明        |
203| ------- | --------- |
204| boolean | 页面是否前进或后退 |
205
206**示例:**
207
208  ```ts
209  // xxx.ets
210  @Entry
211  @Component
212  struct WebComponent {
213    controller: WebController = new WebController()
214    @State steps: number = 2
215
216    build() {
217      Column() {
218        Button('accessStep')
219          .onClick(() => {
220            let result = this.controller.accessStep(this.steps)
221            console.info('result:' + result)
222          })
223        Web({ src: 'www.example.com', controller: this.controller })
224      }
225    }
226  }
227  ```
228
229## backward<sup>(deprecated)</sup>
230
231backward()
232
233按照历史栈,后退一个页面。一般结合accessBackward一起使用。
234
235从API version 9开始不再维护,建议使用[backward<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#backward)代替。
236
237**系统能力:** SystemCapability.Web.Webview.Core
238
239**示例:**
240
241  ```ts
242  // xxx.ets
243  @Entry
244  @Component
245  struct WebComponent {
246    controller: WebController = new WebController()
247
248    build() {
249      Column() {
250        Button('backward')
251          .onClick(() => {
252            this.controller.backward()
253          })
254        Web({ src: 'www.example.com', controller: this.controller })
255      }
256    }
257  }
258  ```
259
260## forward<sup>(deprecated)</sup>
261
262forward()
263
264按照历史栈,前进一个页面。一般结合accessForward一起使用。
265
266从API version 9开始不再维护,建议使用[forward<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#forward)代替。
267
268**系统能力:** SystemCapability.Web.Webview.Core
269
270**示例:**
271
272  ```ts
273  // xxx.ets
274  @Entry
275  @Component
276  struct WebComponent {
277    controller: WebController = new WebController()
278
279    build() {
280      Column() {
281        Button('forward')
282          .onClick(() => {
283            this.controller.forward()
284          })
285        Web({ src: 'www.example.com', controller: this.controller })
286      }
287    }
288  }
289  ```
290
291## deleteJavaScriptRegister<sup>(deprecated)</sup>
292
293deleteJavaScriptRegister(name: string)
294
295删除通过registerJavaScriptProxy注册到window上的指定name的应用侧JavaScript对象。删除后立即生效,无须调用[refresh](#refreshdeprecated)接口。
296
297从API version 9开始不再维护,建议使用[deleteJavaScriptRegister<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#deletejavascriptregister)代替。
298
299**系统能力:** SystemCapability.Web.Webview.Core
300
301**参数:**
302
303| 参数名  | 类型   | 必填  | 说明                                     |
304| ---- | ------ | ---- | ---------------------------------------- |
305| name | string | 是   | 注册对象的名称,可在网页侧JavaScript中通过此名称调用应用侧JavaScript对象。 |
306
307**示例:**
308
309  ```ts
310  // xxx.ets
311  @Entry
312  @Component
313  struct WebComponent {
314    controller: WebController = new WebController()
315    @State name: string = 'Object'
316
317    build() {
318      Column() {
319        Button('deleteJavaScriptRegister')
320          .onClick(() => {
321            this.controller.deleteJavaScriptRegister(this.name)
322          })
323        Web({ src: 'www.example.com', controller: this.controller })
324      }
325    }
326  }
327  ```
328
329## getHitTest<sup>(deprecated)</sup>
330
331getHitTest(): HitTestType
332
333获取当前被点击区域的元素类型。
334
335从API version 9开始不再维护,建议使用[getHitTest<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#gethittestdeprecated)代替。
336
337**系统能力:** SystemCapability.Web.Webview.Core
338
339**返回值:**
340
341| 类型                              | 说明          |
342| ------------------------------- | ----------- |
343| [HitTestType](./arkts-basic-components-web-e.md#hittesttype) | 被点击区域的元素类型。 |
344
345**示例:**
346
347  ```ts
348  // xxx.ets
349  @Entry
350  @Component
351  struct WebComponent {
352    controller: WebController = new WebController()
353
354    build() {
355      Column() {
356        Button('getHitTest')
357          .onClick(() => {
358            let hitType = this.controller.getHitTest()
359            console.info("hitType: " + hitType)
360          })
361        Web({ src: 'www.example.com', controller: this.controller })
362      }
363    }
364  }
365  ```
366
367## loadData<sup>(deprecated)</sup>
368
369loadData(options: { data: string, mimeType: string, encoding: string, baseUrl?: string, historyUrl?: string })
370
371baseUrl为空时,通过”data“协议加载指定的一段字符串。
372
373当baseUrl为”data“协议时,编码后的data字符串将被Web组件作为”data"协议加载。
374
375当baseUrl为“http/https"协议时,编码后的data字符串将被Web组件以类似loadUrl的方式以非编码字符串处理。
376
377从API version 9开始不再维护,建议使用[loadData<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#loaddata)代替。
378
379**系统能力:** SystemCapability.Web.Webview.Core
380
381**参数:**
382
383| 参数名        | 类型   | 必填   | 说明                                     |
384| ---------- | ------ | ---- | ---------------------------------------- |
385| data       | string | 是   | 按照”Base64“或者”URL"编码后的一段字符串。              |
386| mimeType   | string | 是   | 媒体类型(MIME)。                              |
387| encoding   | string | 是   | 编码类型,具体为“Base64"或者”URL编码。                |
388| baseUrl    | string | 否   | 指定的一个URL路径(“http”/“https”/"data"协议),并由Web组件赋值给`window.origin`。 |
389| historyUrl | string | 否   | 历史记录URL。非空时,可被历史记录管理,实现前后后退功能。当baseUrl为空时,此属性无效。 |
390
391**示例:**
392
393  ```ts
394  // xxx.ets
395  @Entry
396  @Component
397  struct WebComponent {
398    controller: WebController = new WebController()
399
400    build() {
401      Column() {
402        Button('loadData')
403          .onClick(() => {
404            this.controller.loadData({
405              data: "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>",
406              mimeType: "text/html",
407              encoding: "UTF-8"
408            })
409          })
410        Web({ src: 'www.example.com', controller: this.controller })
411      }
412    }
413  }
414  ```
415
416## loadUrl<sup>(deprecated)</sup>
417
418loadUrl(options: { url: string | Resource, headers?: Array\<Header\> })
419
420使用指定的http头加载指定的URL。
421
422通过loadUrl注入的对象只在当前document有效,即通过loadUrl导航到新的页面会无效。
423
424而通过registerJavaScriptProxy注入的对象,在loadUrl导航到新的页面也会有效。
425
426从API version 9开始不再维护,建议使用[loadUrl<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#loadurl)代替。
427
428**系统能力:** SystemCapability.Web.Webview.Core
429
430**参数:**
431
432| 参数名     | 类型                       | 必填  | 说明           |
433| -------- | -------------------------- | ---- | -------------- |
434| url      | string \| Resource                     | 是  | 需要加载的 URL。     |
435| headers  | Array\<[Header](./arkts-basic-components-web-i.md#header)\> | 否    | URL的附加HTTP请求头。<br>默认值:[]。 |
436
437**示例:**
438
439  ```ts
440  // xxx.ets
441  @Entry
442  @Component
443  struct WebComponent {
444    controller: WebController = new WebController()
445
446    build() {
447      Column() {
448        Button('loadUrl')
449          .onClick(() => {
450            this.controller.loadUrl({ url: 'www.example.com' })
451          })
452        Web({ src: 'www.example.com', controller: this.controller })
453      }
454    }
455  }
456  ```
457
458## onActive<sup>(deprecated)</sup>
459
460onActive(): void
461
462调用此接口通知Web组件进入前台激活状态。
463
464从API version 9开始不再维护,建议使用[onActive<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#onactive)代替。
465
466**系统能力:** SystemCapability.Web.Webview.Core
467
468**示例:**
469
470  ```ts
471  // xxx.ets
472  @Entry
473  @Component
474  struct WebComponent {
475    controller: WebController = new WebController()
476
477    build() {
478      Column() {
479        Button('onActive')
480          .onClick(() => {
481            this.controller.onActive()
482          })
483        Web({ src: 'www.example.com', controller: this.controller })
484      }
485    }
486  }
487  ```
488
489## onInactive<sup>(deprecated)</sup>
490
491onInactive(): void
492
493调用此接口通知Web组件进入未激活状态。
494
495从API version 9开始不再维护,建议使用[onInactive<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#oninactive)代替。
496
497**系统能力:** SystemCapability.Web.Webview.Core
498
499**示例:**
500
501  ```ts
502  // xxx.ets
503  @Entry
504  @Component
505  struct WebComponent {
506    controller: WebController = new WebController()
507
508    build() {
509      Column() {
510        Button('onInactive')
511          .onClick(() => {
512            this.controller.onInactive()
513          })
514        Web({ src: 'www.example.com', controller: this.controller })
515      }
516    }
517  }
518  ```
519
520## zoom<sup>(deprecated)</sup>
521
522zoom(factor: number): void
523
524调整当前网页的缩放比例。
525
526从API version 9开始不再维护,建议使用[zoom<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#zoom)代替。
527
528**系统能力:** SystemCapability.Web.Webview.Core
529
530**参数:**
531
532| 参数名    | 类型   | 必填   | 说明                           |
533| ------ | ------ | ---- | ------------------------------ |
534| factor | number | 是    | 基于当前网页所需调整的相对缩放比例,正值为放大,负值为缩小。 |
535
536**示例:**
537
538  ```ts
539  // xxx.ets
540  @Entry
541  @Component
542  struct WebComponent {
543    controller: WebController = new WebController()
544    @State factor: number = 1
545
546    build() {
547      Column() {
548        Button('zoom')
549          .onClick(() => {
550            this.controller.zoom(this.factor)
551          })
552        Web({ src: 'www.example.com', controller: this.controller })
553      }
554    }
555  }
556  ```
557
558## refresh<sup>(deprecated)</sup>
559
560refresh()
561
562调用此接口通知Web组件刷新网页。
563
564从API version 9开始不再维护,建议使用[refresh<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#refresh)代替。
565
566**系统能力:** SystemCapability.Web.Webview.Core
567
568**示例:**
569
570  ```ts
571  // xxx.ets
572  @Entry
573  @Component
574  struct WebComponent {
575    controller: WebController = new WebController()
576
577    build() {
578      Column() {
579        Button('refresh')
580          .onClick(() => {
581            this.controller.refresh()
582          })
583        Web({ src: 'www.example.com', controller: this.controller })
584      }
585    }
586  }
587  ```
588
589## registerJavaScriptProxy<sup>(deprecated)</sup>
590
591registerJavaScriptProxy(options: { object: object, name: string, methodList: Array\<string\> })
592
593注入JavaScript对象到window对象中,并在window对象中调用该对象的方法。注册后,须调用[refresh](#refreshdeprecated)接口生效。
594
595从API version 9开始不再维护,建议使用[registerJavaScriptProxy<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#registerjavascriptproxy)代替。
596
597**系统能力:** SystemCapability.Web.Webview.Core
598
599**参数:**
600
601| 参数名        | 类型            | 必填  | 说明                                     |
602| ---------- | --------------- | ---- | ---------------------------------------- |
603| object     | object          | 是    | 参与注册的应用侧JavaScript对象。可以声明方法,也可以声明属性,但是不支持h5直接调用。其中方法的参数和返回类型只能为string,number,boolean |
604| name       | string          | 是    | 注册对象的名称,与window中调用的对象名一致。注册后window对象可以通过此名字访问应用侧JavaScript对象。 |
605| methodList | Array\<string\> | 是    | 参与注册的应用侧JavaScript对象的方法。                 |
606
607**示例:**
608
609  ```ts
610  // xxx.ets
611  class TestObj {
612    constructor() {
613    }
614
615    test(): string {
616      return "ArkUI Web Component"
617    }
618
619    toString(): void {
620      console.info('Web Component toString')
621    }
622  }
623
624  @Entry
625  @Component
626  struct Index {
627    controller: WebController = new WebController()
628    testObj = new TestObj();
629    build() {
630      Column() {
631        Row() {
632          Button('Register JavaScript To Window').onClick(() => {
633            this.controller.registerJavaScriptProxy({
634              object: this.testObj,
635              name: "objName",
636              methodList: ["test", "toString"],
637            })
638          })
639        }
640        Web({ src: $rawfile('index.html'), controller: this.controller })
641          .javaScriptAccess(true)
642      }
643    }
644  }
645  ```
646
647  加载的html文件。
648  ```html
649  <!-- index.html -->
650  <!DOCTYPE html>
651  <html>
652      <head>
653          <meta charset="utf-8">
654      </head>
655      <body>
656          Hello world!
657          <script type="text/javascript">
658              function htmlTest() {
659                  str = objName.test("test function")
660                  console.info('objName.test result:'+ str)
661              }
662          </script>
663      </body>
664  </html>
665
666  ```
667
668## runJavaScript<sup>(deprecated)</sup>
669
670runJavaScript(options: { script: string, callback?: (result: string) => void })
671
672异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。
673
674从API version 9开始不再维护,建议使用[runJavaScript<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#runjavascript)代替。
675
676**系统能力:** SystemCapability.Web.Webview.Core
677
678**参数:**
679
680| 参数名      | 类型                     | 必填 | 说明                                     |
681| -------- | ------------------------ | ---- | ---------------------------------------- |
682| script   | string                   | 是   | JavaScript脚本。                            |
683| callback | (result: string) => void | 否   | 回调执行JavaScript脚本结果。JavaScript脚本若执行失败或无返回值时,返回null。 |
684
685**示例:**
686
687  ```ts
688  // xxx.ets
689  @Entry
690  @Component
691  struct WebComponent {
692    controller: WebController = new WebController()
693    @State webResult: string = ''
694    build() {
695      Column() {
696        Text(this.webResult).fontSize(20)
697        Web({ src: $rawfile('index.html'), controller: this.controller })
698        .javaScriptAccess(true)
699        .onPageEnd((event) => {
700          this.controller.runJavaScript({
701            script: 'test()',
702            callback: (result: string)=> {
703              this.webResult = result
704              console.info(`The test() return value is: ${result}`)
705            }})
706          if (event) {
707            console.info('url: ', event.url)
708          }
709        })
710      }
711    }
712  }
713  ```
714  加载的html文件。
715  ```html
716  <!-- index.html -->
717  <!DOCTYPE html>
718  <html>
719    <head>
720        <meta charset="utf-8">
721    </head>
722    <body>
723        Hello world!
724        <script type="text/javascript">
725            function test() {
726                console.info('Ark WebComponent')
727                return "This value is from index.html"
728            }
729        </script>
730    </body>
731  </html>
732  ```
733
734## stop<sup>(deprecated)</sup>
735
736stop()
737
738停止页面加载。
739
740从API version 9开始不再维护,建议使用[stop<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#stop)代替。
741
742**系统能力:** SystemCapability.Web.Webview.Core
743
744**示例:**
745
746  ```ts
747  // xxx.ets
748  @Entry
749  @Component
750  struct WebComponent {
751    controller: WebController = new WebController()
752
753    build() {
754      Column() {
755        Button('stop')
756          .onClick(() => {
757            this.controller.stop()
758          })
759        Web({ src: 'www.example.com', controller: this.controller })
760      }
761    }
762  }
763  ```
764
765## clearHistory<sup>(deprecated)</sup>
766
767clearHistory(): void
768
769删除所有前进后退记录。
770
771从API version 9开始不再维护,建议使用[clearHistory<sup>9+</sup>](./arkts-apis-webview-WebviewController.md#clearhistory)代替。
772
773**系统能力:** SystemCapability.Web.Webview.Core
774
775**示例:**
776
777  ```ts
778  // xxx.ets
779  @Entry
780  @Component
781  struct WebComponent {
782    controller: WebController = new WebController()
783
784    build() {
785      Column() {
786        Button('clearHistory')
787          .onClick(() => {
788            this.controller.clearHistory()
789          })
790        Web({ src: 'www.example.com', controller: this.controller })
791      }
792    }
793  }
794  ```