在新窗口中打開(kāi)頁(yè)面

2024-02-16 13:38 更新

Web組件提供了在新窗口打開(kāi)頁(yè)面的能力,開(kāi)發(fā)者可以通過(guò)multiWindowAccess()接口來(lái)設(shè)置是否允許網(wǎng)頁(yè)在新窗口打開(kāi)。當(dāng)有新窗口打開(kāi)時(shí),應(yīng)用側(cè)會(huì)在onWindowNew()接口中收到Web組件新窗口事件,開(kāi)發(fā)者需要在此接口事件中,新建窗口來(lái)處理Web組件窗口請(qǐng)求。

說(shuō)明

如下面的本地示例,當(dāng)用戶點(diǎn)擊“新窗口中打開(kāi)網(wǎng)頁(yè)”按鈕時(shí),應(yīng)用側(cè)會(huì)在onWindowNew()接口中收到Web組件新窗口事件。

  • 應(yīng)用側(cè)代碼。
    1. // xxx.ets
    2. import web_webview from '@ohos.web.webview'
    3. //在同一page頁(yè)有兩個(gè)web組件。在WebComponent新開(kāi)窗口時(shí),會(huì)跳轉(zhuǎn)到NewWebViewComp。
    4. @CustomDialog
    5. struct NewWebViewComp {
    6. controller?: CustomDialogController
    7. webviewController1: web_webview.WebviewController = new web_webview.WebviewController()
    8. build() {
    9. Column() {
    10. Web({ src: "", controller: this.webviewController1 })
    11. .javaScriptAccess(true)
    12. .multiWindowAccess(false)
    13. .onWindowExit(()=> {
    14. console.info("NewWebViewComp onWindowExit")
    15. if (this.controller) {
    16. this.controller.close()
    17. }
    18. })
    19. }
    20. }
    21. }
    22. @Entry
    23. @Component
    24. struct WebComponent {
    25. controller: web_webview.WebviewController = new web_webview.WebviewController()
    26. dialogController: CustomDialogController | null = null
    27. build() {
    28. Column() {
    29. Web({ src:$rawfile("window.html"), controller: this.controller })
    30. .javaScriptAccess(true)
    31. //需要使能multiWindowAccess
    32. .multiWindowAccess(true)
    33. .onWindowNew((event) => {
    34. if (this.dialogController) {
    35. this.dialogController.close()
    36. }
    37. let popController:web_webview.WebviewController = new web_webview.WebviewController()
    38. this.dialogController = new CustomDialogController({
    39. builder: NewWebViewComp({webviewController1: popController})
    40. })
    41. this.dialogController.open()
    42. //將新窗口對(duì)應(yīng)WebviewController返回給Web內(nèi)核。
    43. //如果不需要打開(kāi)新窗口請(qǐng)調(diào)用event.handler.setWebController接口設(shè)置成null。
    44. //若不調(diào)用event.handler.setWebController接口,會(huì)造成render進(jìn)程阻塞。
    45. event.handler.setWebController(popController)
    46. })
    47. }
    48. }
    49. }
  • window.html頁(yè)面代碼。
    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>WindowEvent</title>
    6. </head>
    7. <body>
    8. <input type="button" value="新窗口中打開(kāi)網(wǎng)頁(yè)" onclick="OpenNewWindow()">
    9. <script type="text/javascript">
    10. function OpenNewWindow()
    11. {
    12. let openedWindow = window.open("about:blank", "", "location=no,status=no,scrollvars=no");
    13. openedWindow.document.write("<p>這是我的窗口</p>");
    14. openedWindow.focus();
    15. }
    16. </script>
    17. </body>
    18. </html>
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)