当前位置: 首页 > news >正文

HarmonyOS:ArkWeb在新窗口中打开页面

一、概述

Web组件提供了在新窗口打开页面的能力,开发者可以通过multiWindowAccess()接口来设置是否允许网页在新窗口打开。当有新窗口打开时,应用侧会在onWindowNew()接口中收到Web组件新窗口事件。开发者需要在此接口事件中新建窗口来处理Web组件的窗口请求。

说明

  • allowWindowOpenMethod()接口设置为true时,前端页面通过JavaScript函数调用的方式打开新窗口。
  • 当在Web页面调用window.open(url, name)打开新窗口时,ArkWeb内核会根据name查找是否存在已绑定的Web组件。若存在,该Web组件将收到onActivateContent()接口通知,以便应用可将其展示至前台;若不存在,ArkWeb内核将通过onWindowNew()接口通知应用创建新窗口。
  • 如果在onWindowNew()接口通知中创建了新窗口,并将ControllerHandler.setWebController()接口的参数设置为新Web组件的WebviewController,则ArkWeb内核会完成name与该新Web组件的绑定。
  • 如果在onWindowNew()接口通知中没有创建新窗口,需要将ControllerHandler.setWebController()接口的参数设置为null。

在下面的本地示例中,当用户点击“新窗口中打开网页”按钮时,应用会在onWindowNew()接口收到Web组件的新窗口事件。

说明
网页要求用户创建新的窗口时触发回调OnWindowNewEvent(),该回调函数中isUserTrigger参数,true代表用户触发,false代表非用户触发。

二、开发示例

示例效果图

在这里插入图片描述

示例代码

window.html页面代码。

<!DOCTYPE html>
<html>
<head><meta name="viewport" content="width=device-width"/><title>WindowEvent</title>
</head>
<body>
<input type="button" value="新窗口中打开网页" onclick="OpenNewWindow()" style="font-size: 30px">
<script type="text/javascript">function OpenNewWindow(){var txt = '打开的窗口';let openedWindow = window.open("about:blank", "", "location=no,status=no,scrollbars=no");
<!--        openedWindow.document.write("<p>" + "<br><br>" + txt + "</p>");-->
<!--        openedWindow.document.write('<p style="font-size: 20px;">打开的窗口</p>');-->openedWindow.document.write("<br><br>" +'<h1>打开的窗口</h1>');openedWindow.focus();}
</script>
</body>
</html>

WebonWindowNew.ets代码


import { webview } from '@kit.ArkWeb';// 在同一界面有两个Web组件。在WebComponent新开窗口时,会跳转到NewWebViewComp。
@CustomDialog
struct NewWebViewComp {controller?: CustomDialogController;webviewController1: webview.WebviewController = new webview.WebviewController();build() {Column() {Web({ src: "", controller: this.webviewController1 }).javaScriptAccess(true).multiWindowAccess(false).onWindowExit(() => {console.log("NewWebViewComp 回调函数 onWindowExit");if (this.controller) {this.controller.close();}}).onActivateContent(() => {//该Web需要展示到前台,建议应用在这里进行tab或window切换的动作console.log("NewWebViewComp 回调函数  onActivateContent")})}}
}@Entry
@Component
struct WebonWindowNew {controller: webview.WebviewController = new webview.WebviewController();dialogController: CustomDialogController | null = null;build() {Column() {Web({ src: $rawfile("window.html"), controller: this.controller }).javaScriptAccess(true)// 需要使能multiWindowAccess.multiWindowAccess(true).allowWindowOpenMethod(true).onWindowNew((event) => {if (this.dialogController) {this.dialogController.close()}let popController: webview.WebviewController = new webview.WebviewController();this.dialogController = new CustomDialogController({builder: NewWebViewComp({ webviewController1: popController }),// isModal设置为false,防止新窗口被销毁而无法触发onActivateContent回调isModal: false})this.dialogController.open();// 将新窗口对应WebviewController返回给Web内核。// 若不调用event.handler.setWebController接口,会造成render进程阻塞。// 如果没有创建新窗口,调用event.handler.setWebController接口时设置成null,通知Web没有创建新窗口。event.handler.setWebController(popController);})}}
}
http://www.dtcms.com/a/582472.html

相关文章:

  • 青岛谁做网站多少钱做网站大概需要多少费用
  • jmeter内存踩坑记录
  • 浙江建设职业技术学院网站彬县网
  • PowerShell 和 CMD
  • EFS `<br>` 标签渲染修复:从文本到换行的完整解决方案
  • 怎样在建设厅网站查询安全员证彩票网站开发与建设
  • 创建一个网站要钱吗梅林网站建设公司
  • 成都小程序定制开发企业网站怎样做seo优化 应该如何做
  • Java中的设计模式------策略设计模式
  • 太原做网站设计电子商务网站设计原理书籍
  • 网站服务器迁移企业管理咨询机构
  • Redis —— 架构概览
  • 筑牢用电防线:Acrel-1000 自动化系统赋能 35kV 园区高效供电-安科瑞黄安南
  • 青海住房和城乡建设部网站山东省城乡建设厅官网
  • 哈尔滨智能建站模板厦门 网站建设 网站开发
  • 第3节 RSA算法开启公钥加密时代
  • 昆山做网站公司哪家好青岛市黄岛区城市建设局 网站
  • 从正确到卓越:昇腾CANN算子开发高级性能优化指南
  • 网站建设 国家标准微网站自助建站
  • 政务公开系统网站建设短剧分销平台
  • 网站建设的静态网页作业青田网站做服装找工作
  • 【1min 速通 -- PyTorch 张量数据类型】张量类型的获取、转化与判别
  • git stash push 命令作用及使用场景
  • 青岛李沧区城乡建设局网站自己给网站做优化怎么做
  • 梧州网站建设设计朝阳专业网站建设
  • 网站模板和定制的区别网站营销应该怎么做
  • 用自己服务器做网站用备案wordpress功能小工具增加按钮
  • 2025 年的热门 AI 编程工具评测:Cursor、Claude Code、Codex、Lovable、v0 等
  • 切片上传version2.0 进度用模拟后端实时返回的进度,大文件1.05GB耗时7.49秒
  • App HTTPS 抓包 工程化排查与工具组合实战