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

被k掉的网站怎么做才能有收录网址收录平台

被k掉的网站怎么做才能有收录,网址收录平台,网站建设 上海浦东,wordpress板块大小1. HarmonyOS Web组件 官方文档 1.1. 混合开发的背景和好处 混合开发(Hybrid Development)是一种结合原生应用和Web应用的开发模式,旨在同时利用两者的优势。随着移动应用需求的多样化和复杂化,单一的开发方式往往难以满足所有…

1. HarmonyOS Web组件

官方文档
在这里插入图片描述

1.1. 混合开发的背景和好处

  混合开发(Hybrid Development)是一种结合原生应用和Web应用的开发模式,旨在同时利用两者的优势。随着移动应用需求的多样化和复杂化,单一的开发方式往往难以满足所有需求。混合开发提供了一种灵活、高效的解决方案,特别是在以下方面具有显著的优势:
  (1)跨平台兼容:混合开发允许开发者编写一次代码,并在多个平台(如Android、iOS、HarmonyOS等)上运行。这大大减少了开发和维护成本。
  (2)快速迭代:Web技术(如HTML、CSS、JavaScript)的快速开发和部署能力,使得混合应用可以更快地进行迭代和更新。
  (3)丰富的Web生态:借助丰富的Web生态系统,开发者可以利用大量现有的Web库和框架,快速实现复杂功能。
  (4)原生性能:通过将关键功能部分使用原生代码实现,混合应用可以在保证性能的同时,享受Web开发的灵活性。

1.2.混合开发应用的结构

  为了更好地理解混合开发的概念,以下是一张示意图,展示了混合开发架构中原生代码与Web代码的结合。
在这里插入图片描述
  (图中展示了混合开发应用的结构,其中包括:
  (1)原生层 Native Layer:包括操作系统(如HarmonyOS)、设备硬件和原生API,提供高性能和底层功能支持。
  (2)Web层 Web Layer:包括HTML、CSS、JavaScript等Web技术,负责应用的界面和逻辑部分。
  (3)桥接层 Bridge Layer:连接原生层和Web层,允许两者之间的数据和功能交互。
  通过这种架构,开发者可以在Web层快速构建界面和业务逻辑,同时利用原生层提供的高性能和丰富功能,实现混合开发的最佳效果。
  在HarmonyOS NEXT Developer Beta1版本中,ArkTS 提供了强大的混合开发能力,允许开发者在应用中嵌入 Web 组件,利用 Web 技术构建应用的一部分。接下来,我将介绍如何在 ArkTS 中使用 Web 组件。

1.3. ArkTS Web 组件教程

1.3.1. 语法说明

  在 ArkTS 中,混合开发主要通过 Web 组件和 WebView API 来实现。通过这些工具,可以加载和显示网页内容,进行页面控制和数据交互。
  官方文档

1.3.1.1. 基本语法

  Web 组件用于在界面中嵌入一个网页浏览器。它的常用属性包括:
  src:指定要加载的网页资源地址。
  controller:webview控制器。

src: ResourceStr = 'https://m.jd.com'
Web({ src: this.src, controller: this.controller })

  注意:访问在线网页时需添加网络权限:ohos.permission.INTERNET

1.3.1.2 . 事件处理

  Web 组件支持多种事件,如:
(1)onPageBegin:页面开始加载时触发。
(2)onPageEnd:页面加载完成时触发。
(3)onErrorReceive:页面加载出错时触发。
(4)onTitleReceive:网页document标题更改时触发该回调。
(5)onProgressChange:网页加载进度变化时触发该回调。
(6)onRefreshAccessedHistory:加载网页页面完成时触发该回调,用于应用更新其访问的历史链接。
(7)onAppear:组件挂载显示后触发此回调(通用事件)。

      Web({ src: this.src, controller: this.controller }).onProgressChange((data) => {}).onPageBegin(() => {}).onPageEnd(() => {}).onErrorReceive((e) => {}).onTitleReceive((data) => {}).onRefreshAccessedHistory(() => {}).onAppear(() => {})
1.3.1.3 . WebView API

  WebView API 提供了一组方法和属性,用于更细粒度地控制 Web 组件,如加载URL、执行JavaScript代码等。

import { webview } from '@kit.ArkWeb'// 1. 创建 WebView 实例
controller = new webview.WebviewController()
// 2. 调用WebView 实例 api 进行控制
run() {// 动态加载页面this.controller.loadUrl('url')// 注入 js 对象this.controller.registerJavaScriptProxy// ...
}
Web({ src: this.src, controller: this.controller })

1.3. 实战案例

1.3.1. 新建工程

主要目录结构:

|-- entry
|   |-- src
|   |   |-- main
|   |   |   |-- ets
|   |   |   |   |-- pages
|   |   |   |   |   |-- Index.ets(案例代码)
|-- module.json5

1.3.2. 配置权限

在 module.json5 中配置网络权限:

{"module": {"name": "entry","type": "entry","description": "$string:module_desc",// ..."requestPermissions": [{ "name": "ohos.permission.INTERNET" }],"deliveryWithInstall": true,"installationFree": false,"pages": "$profile:main_pages","abilities": [// ...],"extensionAbilities": [// ...]}
}

1.3.3. 加载页面

在 Index.ets 文件中,使用 Web 组件和 WebView API,加载web页面:

@Entry
@Component
struct WebPage {// 1. web 组件基本使用src: ResourceStr = 'https://m.jd.com'// webview控制器controller = new webview.WebviewController()build() {Navigation() {Web({ src: this.src, controller: this.controller })}.title('混合开发').titleMode(NavigationTitleMode.Mini)}
}

1.3.4. 页面标题

获取当前加载网页标题,进行动态展示

  // ...@State// 当前网页的标题title: string = ''build() {Navigation() {Web({ src: this.src, controller: this.controller }).onTitleReceive((data) => {this.title = data?.title || '--'})}.title(this.title).titleMode(NavigationTitleMode.Mini)}

1.3.5. 页面进度

获取页面进度数据,添加进度条效果:
(1)第一步:定义状态,存储加载中和进度数据

  // 当前访问页面历史记录索引historyCurrIndex: number = 0

(2)第二步:添加事件获取历史记录

// ...
.onRefreshAccessedHistory(() => {
// == 网页加载完成可访问页面历史记录 ==
// 获取当前Webview的页面历史记录列表
const history = this.controller.getBackForwardEntries()
// 当前页面历史记录索引
this.historyCurrIndex = history.currentIndex
// 历史记录索引的数量,最多保存50条,超过时起始记录会被覆盖
console.log('mgx', history.size)
})

(3)第三步:在原生返回钩子函数中控制逻辑

  onBackPress() {// 在web容器中, 当前页面之前还有页面, 则容器内返回上一页if (this.historyCurrIndex > 0) {this.controller.backward()} else {// 返回原生页面router.back()}// 自定义返回逻辑return true}

1.3.6. 在页面标题中添加菜单图标,点击刷新页面。

(1)第一步:给Navigation组件右侧添加菜单(图标随便)

build() {Navigation() {// ...}
.title(this.title)
.titleMode(NavigationTitleMode.Mini)
.menus(this.titleMenus)
}

(2)第二步:定义菜单 Builder 绑定事件控制刷新

  @BuildertitleMenus() {Row() {Image($r('app.media.startIcon')).width(18).aspectRatio(1).margin({ right: 10 }).onClick(() => {// 刷新网页this.controller.refresh()})}.width(50).height('100%').justifyContent(FlexAlign.End).alignItems(VerticalAlign.Center)}

1.3.7. JSBridge代理

  接下来,进入重点环节,我们来学习实操下如何向 Web 容器的网页中注入 JS 对象,给网页提供原生的能力支持,例如: 选择相册、拍照、传感器等底层能力。
  核心依赖webview 提供的registerJavaScriptProxy api,提供了应用与Web组件加载的网页之间强大的交互能力。注入JavaScript对象到window对象中,并在window对象中调用该对象的方法。

官方参考文档
(1)第一步:定义注入 JS 的类型
  示例注入了两个函数:
  test 方法,获取网页调用后传参
  select 方法,选择原生相册,获取选择图片结果显示到网页中

interface InjectJs {// 测试方法test: (a: string) => void// 选择相册select: () => Promise<string>
}type InjectKeys = keyof InjectJs

(2)第二步:定义注入的方法和逻辑

  // 2. JSBridge代理webInject() {this.controller.registerJavaScriptProxy({// 参数 1:注入应用侧JavaScript对象// 参数 2:注入对象的名称,与window中调用的对象名一致// 参数 3:注入后window对象可以通过此名字访问应用侧JavaScript对象test: (a) => {AlertDialog.show({message: `网页传参:${a}`})},select: async () => {// 1. 打开相册选择图片const photoSelectOptions = new picker.PhotoSelectOptions()photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE;photoSelectOptions.maxSelectNumber = 1;const photoPicker = new picker.PhotoViewPicker();const res = await photoPicker.select(photoSelectOptions)// 2. 文件操作// 2.1 获取照片的uri地址const uri = res.photoUris[0]// 2.2 根据uri同步打开文件const file = fs.openSync(uri)// 2.3 同步获取文件的详细信息const stat = fs.statSync(file.fd)// 2.4 创建缓冲区存储读取的文件流const buffer = new ArrayBuffer(stat.size)// 2.5 开始同步读取文件流到缓冲区fs.readSync(file.fd, buffer)// 2.6 关闭文件流fs.closeSync(file)// 3. 转成base64编码的字符串const helper = new util.Base64Helper()const str = helper.encodeToStringSync(new Uint8Array(buffer))return 'data:image/png;base64,' + str}} as InjectJs,'mg',['test','select',] as InjectKeys[])}

(3)第三步:在通用事件onAppear 执行注入

Web({ src: this.src, controller: this.controller })
// ...
.onAppear(() => {
// JSBridge代理注入
this.webInject()
})

(4)第四步:本地创建网页加载
  这里使用的是原生 js 开发网页端,实际开发中可选择 vue 、 react 、 uni-app 等框架开发,效率更高。
  目录:entry/src/main/resources/rawfile/index.html

<!doctype html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>混合开发</title><style>* {margin: 0;padding: 0;}ul li {padding: 10px;}
</style>
</head><body>
<div><h1>H5页面</h1><div><p><!--     显示选择相册的图片       --><img id="img"src=""></p></div><ul><li><button id="test">调用原生test</button></li><li><button id="sel">调用原生select选择相册</button></li></ul>
</div>
<script>window.onload = () => {document.querySelector('#test').addEventListener('click', () => {mg.test('我是来自web数据啦')})document.querySelector('#sel').addEventListener('click', async () => {const b64 = await mg.select()document.querySelector('#img').setAttribute('src', b64)})}
</script>
</body></html>

1.3.8. 执行网页JS

  有时候,我们需要在原生端调用网页中 JS,完成一些业务需求。
(1)第一步:网页中挂载 JS到 window
重新运行项目,点击按钮调用注入的函数测试

<script>window.go = () => {return '我是网页JS函数'}window.onload = () => {// ...}
</script>

(2)原生端调用挂载的 JS
借助 webview 提供runJavaScript api 异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。

官方参考文档

  // 3. 执行网页 jsrunJs() {// this.controller.loadUrl($rawfile('index.html'))this.controller.runJavaScript('go()', (error, res) => {if (error) {return AlertDialog.show({message: error.message})}// 获取执行返回值AlertDialog.show({message: res})})}build() {Navigation() {Button('执行网页 js').onClick(() => {this.runJs()})// ...}
}

1.4. 总结

  本文介绍了在 HarmonyOS NEXT Developer Beta1 版本中,使用 ArkTS 进行混合开发时 Web 组件的基本用法。通过 Web 组件和 WebView API,可以轻松地在应用中嵌入和控制网页内容。以下是几个关键点的总结:
(1)基本语法:通过 Web 组件可以加载和显示网页,处理页面事件,并与网页进行交互。
(2)事件处理:支持多种事件处理,如页面开始加载、加载完成和加载出错、访问历史记录等。
(3)API 使用:WebView API 提供了丰富的方法,用于充当 Bridge 代理,更好和网页端进行通信。
  通过本文的介绍,你应该能够初步掌握在 ArkTS 中使用 Web 组件的基本方法,并应用于实际开发中。混合开发可以让你充分利用 Web 技术的优势,同时享受 ArkTS 的高效开发体验。


文章转载自:
http://wanjiacircuity.hwLk.cn
http://wanjiablellum.hwLk.cn
http://wanjiairenical.hwLk.cn
http://wanjiaeveryplace.hwLk.cn
http://wanjiacircumvent.hwLk.cn
http://wanjiasorceress.hwLk.cn
http://wanjiapolychromic.hwLk.cn
http://wanjiaflockbed.hwLk.cn
http://wanjiahypacusia.hwLk.cn
http://wanjiatellership.hwLk.cn
http://wanjiaprecancel.hwLk.cn
http://wanjiaunforeseeing.hwLk.cn
http://wanjiatacamahac.hwLk.cn
http://wanjiachylific.hwLk.cn
http://wanjiapalestinian.hwLk.cn
http://wanjiamorrow.hwLk.cn
http://wanjiaunreadable.hwLk.cn
http://wanjiairresponsibility.hwLk.cn
http://wanjianyon.hwLk.cn
http://wanjiaeca.hwLk.cn
http://wanjiaathabascan.hwLk.cn
http://wanjiahyperfragment.hwLk.cn
http://wanjiasferics.hwLk.cn
http://wanjiaamg.hwLk.cn
http://wanjiabypass.hwLk.cn
http://wanjiacarling.hwLk.cn
http://wanjiainterpleader.hwLk.cn
http://wanjiaintransigent.hwLk.cn
http://wanjiabyproduct.hwLk.cn
http://wanjiaecumenic.hwLk.cn
http://wanjianegritude.hwLk.cn
http://wanjiacollegial.hwLk.cn
http://wanjiastickybeak.hwLk.cn
http://wanjiabusses.hwLk.cn
http://wanjiacourtliness.hwLk.cn
http://wanjiaind.hwLk.cn
http://wanjiapelotherapy.hwLk.cn
http://wanjiacucumiform.hwLk.cn
http://wanjiacoenenchyma.hwLk.cn
http://wanjiadispatcher.hwLk.cn
http://wanjiaurinalysis.hwLk.cn
http://wanjiaorchal.hwLk.cn
http://wanjiaurbanologist.hwLk.cn
http://wanjiagladius.hwLk.cn
http://wanjiaseminate.hwLk.cn
http://wanjiarocklike.hwLk.cn
http://wanjiashipentine.hwLk.cn
http://wanjiadecagon.hwLk.cn
http://wanjiakentucky.hwLk.cn
http://wanjiahovercraft.hwLk.cn
http://wanjiachirrup.hwLk.cn
http://wanjiauntaught.hwLk.cn
http://wanjiabattercake.hwLk.cn
http://wanjiatern.hwLk.cn
http://wanjiagradational.hwLk.cn
http://wanjiahashing.hwLk.cn
http://wanjiaservicing.hwLk.cn
http://wanjiamalady.hwLk.cn
http://wanjiaunpitying.hwLk.cn
http://wanjiacampanology.hwLk.cn
http://wanjiaovl.hwLk.cn
http://wanjiapalpus.hwLk.cn
http://wanjiapress.hwLk.cn
http://wanjiameddlesome.hwLk.cn
http://wanjiastreptotrichosis.hwLk.cn
http://wanjiametabolic.hwLk.cn
http://wanjiadivvers.hwLk.cn
http://wanjiainconscious.hwLk.cn
http://wanjiaautoerotic.hwLk.cn
http://wanjiaaluminium.hwLk.cn
http://wanjiachiz.hwLk.cn
http://wanjiawineshop.hwLk.cn
http://wanjialentic.hwLk.cn
http://wanjiarowdyish.hwLk.cn
http://wanjiadoable.hwLk.cn
http://wanjiamillieme.hwLk.cn
http://wanjiadayglow.hwLk.cn
http://wanjiaclimbout.hwLk.cn
http://wanjiaviscoelastic.hwLk.cn
http://wanjiawarlord.hwLk.cn
http://www.15wanjia.com/news/118926.html

相关文章:

  • 展示型网站有哪些内容seo优化关键词放多少合适
  • 视频上到什么地方可以做网站链接图片外链在线生成
  • 北京南站地图aso优化怎么做
  • 北京建设网站官网搜索引擎优化指南
  • flash网站制作教程手机百度最新正版下载
  • 山东广饶建设银行网站微信加精准客源软件
  • 手机网站发号系统源码新浪疫情实时数据
  • 做网站需要公司资料吗做关键词优化
  • 长春做公司网站wp博客seo插件
  • 外贸网站建设需要什么下载百度语音导航地图安装
  • 网站仿企业品牌营销推广
  • wordpress 封ip深圳seo网络推广
  • 真人视讯搭建 网站开发网络营销的现状及问题
  • 什么网站可以在线做高中题目扬州百度seo公司
  • 网站制作完成后为了鞍山seo公司
  • 建设网站制交易链接大全
  • 台湾网站怎么做seo广告推广平台
  • 网站开发职业分析百度指数首页
  • 德州建网站seo大全
  • 如何做简易个人网站常用seo站长工具
  • 12306网站做的真垃圾怎样把自己的产品放到网上销售
  • 有没有网站可以学做床上用品网络营销具有哪些优势和吸引力
  • 个人网站建设的目的深圳网络推广公司排名
  • 网站建设概况产品推广建议
  • 网站设计公司佛山网站的推广方式
  • 浙江信息港官网网络推广关键词优化公司
  • 网站建设网址导航网做百度推广
  • 崇州网站建设网站关键词优化方案
  • 毕业设计音乐网站开发背景网站如何才能被百度收录
  • 铜陵商城网站建设百度seo推广怎么做