HarmonyOS Next开发学习手册——管理Web组件

本文为博客 VIP 文章,开通 VIP 后可阅读全文

开通 VIP

解决Web组件本地资源跨域问题

拦截本地资源跨域

为了提高安全性,ArkWeb内核不允许file协议或者resource协议访问URL上下文中来自跨域的请求。因此,在使用Web组件加载本地离线资源的时候,Web组件会拦截file协议和resource协议的跨域访问。当Web组件无法访问本地跨域资源时,开发者可以在devtools控制台中看到类似以下报错信息:

Access to script at 'xxx' from origin 'xxx' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, arkweb, data, chrome-extension, chrome, https, chrome-untrusted.

本地资源跨域问题解决方法

如果Web组件要成功访问这些跨域资源,开发者需要使用http或者https等协议替代原本使用的file协议或者resource协议进行加载。其中替代的url的域名为自己构造的仅供个人或者组织使用的域名,尽量不要和网络上真实存在的域名冲突。同时需要开发者使用Web组件的 onInterceptRequest 对本地资源进行拦截替换。

以下结合示例说明如何解决本地资源跨域访问失败的问题。其中index.html和js/script.js置于工程中rawfile目录下。如果使用resource协议访问index.html,js/script.js将被跨域拦截无法加载。示例中使用https://www.example.com/域名替换原本的resource协议,同时使用 onInterceptRequest 接口替换资源,使得js/script.js可以成功加载,解决了跨域拦截的问题。

// main/ets/pages/index.ets
import { webview } from '@kit.ArkWeb';

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  webviewController: webview.WebviewController = new webview.WebviewController();
  // 构造域名和本地文件的映射表
  schemeMap = new Map([
    ["https://www.example.com/index.html", "index.html"],
    ["https://www.example.com/js/script.js", "js/script.js"],
  ])
  // 构造本地文件和构造返回的格式mimeType
  mimeTypeMap = new Map([
    ["index.html", 'text/html'],
    ["js/script.js", "text/javascript"]
  ])

  build() {
    Row() {
      Column() {
        // 针对本地index.html,使用http或者https协议代替file协议或者resource协议,并且构造一个属于自己的域名。
        // 本例中构造www.example.com为例。
        Web({ src: "https://www.example.com/index.html", controller: this.webviewController })
          .javaScriptAccess(true)
          .fileAccess(true)
          .domStorageAccess(true)
          .geolocationAccess(true)
          .width("100%")
          .height("100%")
          .onInterceptRequest((event) => {
            if (!event) {
              return;
            }
            // 此处匹配自己想要加载的本地离线资源,进行资源拦截替换,绕过跨域
            if (this.schemeMap.has(event.request.getRequestUrl())) {
              let rawfileName: string = this.schemeMap.get(event.request.getRequestUrl())!;
              let mimeType = this.mimeTypeMap.get(rawfileName);
              if (typeof mimeType === 'string') {
                let response = new WebResourceResponse();
                // 构造响应数据,如果本地文件在rawfile下,可以通过如下方式设置
                response.setResponseData($rawfile(rawfileName));
                response.setResponseEncoding('utf-8');
                response.setResponseMimeType(mimeType);
                response.setResponseCode(200);
                response.setReasonMessage('OK');
                response.setResponseIsReady(true);
                return response;
              }
            }
            return null;
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

<!-- main/resources/rawfile/index.html -->
<html>
<head>
    <meta name="viewport" content="width=device-width,initial-scale=1">
</head>
<body>
<script crossorigin src="./js/script.js"></script>
</body>
</html>

// main/resources/rawfile/js/script.js
const body = document.body;
const element = document.createElement('div');
element.textContent = 'success';
body.appendChild(element);

使用智能防跟踪功能

Web组件支持智能防跟踪功能,即跟踪型网站作为三方插入别的网页时,其发送的网络请求禁止携带cookie。

  • 通过调用 enableIntelligentTrackingPrevention 接口使能或者关闭相应Web组件的智能防跟踪功能,默认情况下该功能未启用。
// xxx.ets
import { webview } from '@kit.ArkWeb';
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct WebComponent {
  controller: webview.WebviewController = new webview.WebviewController();

  build() {
    Column() {
      Button('enableIntelligentTrackingPrevention')
        .onClick(() => {
          try {
            this.controller.enableIntelligentTrackingPrevention(true);
            console.log("enableIntelli
OpenHarmony实战开发-如何使用隐私模式 开发者在创建Web组件时,可以将可选参数incognitoMode设置为’true’,来开启Web组件的隐私模式。 当使用隐私模式时,浏览网页时的cookies、 cache data 等数据不会保存在本地的持久化文件,当隐私模式的Web组件被销毁时,cookies、 cache data等数据将不被记录下来。 阅读详情

相关推荐

OpenHarmony实战开发-如何使用Web组件加载页面

页面加载是Web组件的基本功能。根据页面加载数据来源可以分为三种常用场景,包括加载网络页面、加载本地页面、加载HTML格式的富文本数据。

m0_70749039的博客 1537

1小时解决HarmonyOSWeb组件访问限制问题.pdf

文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 HarmonyOS 让应用开发突破设备边界!通过分布式设计,一次开发即可让应用在手机、智慧屏、车载设备等多终端流畅运行。ArkTS 语言搭配简洁的 Declarative UI 框架,代码量减少 50%+,开发效率直线提升。DevEco Studio 提供可视化调试与多端预览工具,新手也能快速上手。华为开放 HMS Core 丰富能力,一键集成推送、支付等功能,助力应用快速落地。现在接入 Harmony 生态,不仅能抢占万物互联时代先机,更可享受开发者扶持计划,快来打造你的设备创新应用吧!

HarmonyOS Next开发学习手册——ArkWeb

ArkWeb(方舟Web)提供了Web组件,用于在应用程序中显示Web页面内容,为开发者提供页面加载、页面交互、页面调试等能力。页面加载:Web组件提供基础的前端页面加载的能力,包括加载网络页面、本地页面、html格式文本数据。页面交互:Web组件提供丰富的页面交互的方式,包括:设置前端页面深色模式,新窗口中加载页面,位置权限管理,Cookie管理,应用侧使用前端页面JavaScript等能力。页面调试:Web组件支持使用 Devtools工具 调试前端页面。

maniuT的博客 1876

HarmonyOS Next(纯血鸿蒙)它到底像谁

后续再也没有写关于鸿蒙的文章。没错,我确实入坑了鸿蒙,并且成功上架了几款App和元服务,虽然当前的用户量还比较少,但鸿蒙开发的整体流程已然蹚了一遍,是时候来做一些总结了。本篇从应用开发的角度聊聊鸿蒙它像谁?它有哪些不一样的特征?开发者怎么快速入门?

9531

鸿蒙Next怎么升级,有便捷的方法?

关于App鸿蒙化改造,先把关键的、需要适配的核心功能,自研团队集中精力适配了,其他业务场景,重要的通过小程序化改造,或者让第三方开发商提供小程序的版本,以极低的门槛植入到App中,先保证关键业务能在鸿蒙NEXT中运行,后面再慢慢改造边缘场景,是不是至少是个保底的方案?

speedoooo的博客 6543

鸿蒙HarmonyOS NEXT十大开源项目

【OH哔哩】是一款基于OpenHarmony系统ArkUI框架开发的哔哩哔哩动画第三方客户端。

欢迎加入Android老司机学院 482266514(技术交流群)密码CSDN 2万+

鸿蒙HarmonyOS NEXT】 API11及以上开发文档以及IDE下载

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的。

m0_70749039的博客 4930

鸿蒙HarmonyOS实战开发:TypeScript开发手册指南

TypeScript是JavaScript的一个超集,具有静态类型特性,旨在简化大型JavaScript应用程序的开发

2401_84194030的博客 1356

鸿蒙HarmonyOS NEXT开发组件变化事件(ArkTS组件事件)

组件变化事件指组件显示的尺寸、位置等发生变化时触发的事件。

shudaoshanBBQ的博客 1600

HarmonyOS Next开发学习手册——Form Kit(卡片开发服务)

Form Kit(卡片开发服务)提供一种界面展示形式,可以将应用的重要信息或操作前置到服务卡片(以下简称“卡片”),以达到服务直达、减少跳转层级的体验效果。卡片常用于嵌入到其他应用(当前被嵌入方即卡片使用方只支持系统应用,例如桌面)中作为其界面显示的一部分,并支持拉起页面、发送消息等基础的交互能力。

maniuT的博客 1944

HarmonyOS NEXT应用开发Web组件预览PDF文件实现案例

本案例通过Web组件实现预览本地PDF文件和预览网络PDF文件,代码为Tabs容器组件包含了两个独立的TabContent子组件,分别标示为预览本地PDF文件和预览网络PDF文件。每个子组件内部构建一个Web组件。第一个Web组件利用resource协议关联本地PDF文件路径以预览本地存储的PDF资源;第二个Web组件则通过配置网络链接属性,实现从互联网加载并预览远程PDF文件内容。

2401_83047642的博客 2125

鸿蒙HarmonyOS Next应用开发实战学习路线

随着华为鸿蒙系统(HarmonyOS)的推出,越来越多的开发者开始关注并投入到鸿蒙生态的开发中。作为面向多设备、分布式架构的操作系统,HarmonyOS开发者提供了全新的开发环境和技术栈,不仅在智能手机、智能穿戴等设备上拥有广泛的应用,还将在未来的物联网设备上发挥重要作用。对于初学者和有经验的开发者来说,学习鸿蒙系统的开发技术需要一条清晰的学习路线。这不仅有助于快速入门,还能帮助开发者在实践中逐步掌握关键技能,避免在复杂的技术环境中迷失方向。

小北的博客 3528

HarmonyOS NEXT鸿蒙忽略证书验证抓包https请求

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的。

m0_70749039的博客 2090

HarmonyOS NEXT实战开发:透明度设置

设置组件的透明度。

hanyanyou的博客 2249

鸿蒙HarmonyOS NEXT开发自定义事件拦截(ArkTS组件事件)

组件提供自定义的事件拦截能力

shudaoshanBBQ的博客 1325

华为鸿蒙系统掀起高校合作热潮,未来技术风口已至

截至目前,全国已有超过300所高校携手华为鸿蒙,其中不乏23所蜚声海内外的985工程高校和46所211工程高校。这一数字,不仅象征着鸿蒙系统在教育领的广泛影响,更代表着中国高等教育与前沿科技的深度融合。令人振奋的是,清华大学、北京航空航天大学和武汉大学等985工程高校已率先将鸿蒙知识融入课堂,为学生们打开了一扇通往未来科技的大门。同时,等多所高校的鸿蒙项目已获批准,即将引领新一轮的技术学习热潮。值得一提的是,这些鸿蒙相关课程是在教育部高教司的悉心指导下,华为与高校共同打造的产学合作育人项目。

huahaiyi的博客 1370

Harmony鸿蒙南向驱动开发使用指南

旨在构建统一的驱动架构平台,为驱动开发者提供更精准、更高效的开发环境,力求做到一次开发,多系统部署。

m0_64420071的博客 2188

《精通HarmonyOS NEXT鸿蒙App开发入门与项目化实战》读者福利系列博文的目录

《精通HarmonyOS NEXT鸿蒙App开发入门与项目化实战》已于9月8日开启预售,为读者提供系列配套博文作为学习福利。该书涵盖鸿蒙6适配、API变更、ArkTS语言特性、窗口管理Web组件等核心开发内容,并按章节分类整理相关技术文章。同时提供共享库发布、签名配置等实战指南,配套京东、当当等官方购买渠道。通过系统化的教程和扩展资料,帮助开发者快速掌握鸿蒙应用开发技能,共建鸿蒙生态。

俩毛豆的博客 3166
上一篇: HarmonyOS Next开发学习手册——Web组件嵌套滚动
下一篇: HarmonyOS Next开发学习手册——使用Web组件加载页面
OpenHarmony_小贾
博客等级 码龄3年 1万+粉丝 · 1181原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值