quickapp_快应用_快应用组件

news2024/11/24 0:03:46

快应用组件

      • web组件
        • web页面与快应用页面通信
          • 网页接收/发送消息
            • 网页接收消息
          • 快应用页面接收/发送消息
            • 给网页发送消息
          • 通信前提- trustedurl

web组件

作用:用于显示在线的 html 页面(可以嵌入三方页面或者某些不太重要的页面)

缺点:打开会比原生慢一点,可能存在白屏现象。

示例:

<web src='http://baidu.com'></web>

渲染结果如下:
在这里插入图片描述

web页面与快应用页面通信

快应用是允许快应用页面与web页面通信的。

网页接收/发送消息

当网页被嵌入快应用时,默认会向该页面的windows中添加两个方法
在这里插入图片描述

注意: 该方法只有在快应用嵌套的web页面中可以使用,否则这两个方法将不存在(在web页面做好兼容)!

网页接收消息
mounted () {
  if (window.system && window.system.onmessage) {
    window.system.onmessage = function (data) {
      console.log('message received: ' + data) // data为快应用发送的消息
    }
  }
}
快应用页面接收/发送消息
  • 页面加载完成时触发
    在这里插入图片描述

  • 向网页发送消息的方法
    在这里插入图片描述

  • 接收到网页发来的消息时触发
    在这里插入图片描述

给网页发送消息
  • 语法

    this.$element('web').postMessage({
      message: messageString,
      success: function(){},
      fail: function(){}
    })
    
  • 注意点1:message必须为String类型,若是传递其他数据类型如对象,在真机环境会报错

    this.$element('web').postMessage({
      message: {str: '11111'} // 发送消息为一个对象
    })
    

    上述代码报如下错误

    java.lang.ClassCastException: org.json.JSONObject cannot be cast   to java.lang.String
    at org.hapjs.widgets.Web.f(SourceFile:535)
    at org.hapjs.widgets.Web.invokeMethod(SourceFile:681)
    at org.hapjs.render.b.a.a(SourceFile:30)
    at org.hapjs.render.RootView.applyAction(SourceFile:1134)
    at org.hapjs.render.RootView.applyActions(SourceFile:1120)
    at org.hapjs.render.RootView.a(SourceFile:1105)
    at org.hapjs.render.RootView.e(SourceFile:1088)
    at org.hapjs.render.RootView$a.handleMessage(SourceFile:365)
    at android.os.Handler.dispatchMessage(Handler.java:117)
    at android.os.Looper.loopOnce(Looper.java:205)
    at android.os.Looper.loop(Looper.java:293)
    at android.app.ActivityThread.main(ActivityThread.java:9596)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:586)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1204)
    
    this.$element('web').postMessage({
      message: '111111' //发送的消息为111111
    })
    

    上述代码成功发送

    若是想发送对象类型可以使用 JSON.stringify进行转换但是在接收时要注意使用try catch包裹,因为快应用默认发送的数据是对象类型且并没有stringify

    mounted () {
      const _this = this
      if (window.system && window.system.onmessage) {
        window.system.onmessage = function (data) {
          let d
          try {
            d = JSON.parse(data)
          } catch (err) {
          }
          if (d && d.page === 'quick_app') {
            _this.getInfo(d)
          }
       }
    }
    
  • 注意点2:注意发送数据的时机,发送数据一定要等待网页渲染完毕之后,否则在网页端将接收不到数据

    示例:

    我想在页面渲染完成之后发送信息给web页面,因此我选择在快应用的onReady生命周期发送数据

    onReady(){
      this.$element('web').postMessage({
        message: '111111'
      })
    }
    

    但是我发现在网页在如下代码拿不到指定的信息

    mounted () {
     const _this = this
     if (window.system && window.system.onmessage) {
        window.system.onmessage = function (data) {
          console.log('data', data)
        }
      }
    }
    

    原因是因为在发送数据的时候web网页还没有渲染完成

    我们可以在web组件的pagefinish事件时传送数据,此事件在web页面渲染完成时触发

     @pagefinish="pagefinish"
    
    pagefinish(){
      this.$element('web').postMessage({
        message: '111111'
      })
    }
    
通信前提- trustedurl

web页面可以与快应用通信的前提是:只有在互相信任的页面路径才会允许通信。

web组件的trustedurl属性就是表示可信任的网址的集合。只有 trustedurl 中链接或者 src 链接的网页可以和框架进行双向通信(支持正则表达式)。

有人可能会疑惑:我没有添加trustedurl属性,但是现在通信没有问题? 原因是因为在默认情况下会添加web组件的src属性到trustedurl中。

因此若是URL永远不变,则可以省略,若是路径携带参数或url不是固定值,则必须添加trustedurl!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1185048.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

centos的docker镜像下载ffmpeg的方式

ffmpeg是业界比较好用的开源的音频处理工具&#xff0c;当我们在实际业务中使用ffmpeg的时候&#xff0c;直接使用yum安装回提示找不到ffmpeg的包&#xff0c;遇到这种情况&#xff0c;可以通过以下方式来进行安装&#xff08;docker环境&#xff09;。 已经拥有镜像 更新源 …

激光雷达(LiDAR)技术

激光雷达 LiDAR 不久前引发热议的iPhone 12 Pro机型&#xff0c;配备了全新的LiDAR扫描仪&#xff0c;只需点击自带的Measure应用程序&#xff0c;便能立即测量一个人的身高。 在人工智能和自动驾驶领域&#xff0c;神奇的LiDAR又有着怎样的用处&#xff1f;随着汽车巨头们在…

Redis系列-四种部署方式-单机部署+主从模式+哨兵模式【7】

目录 Redis系列-四种部署方式-单机部署主从模式【7】redis-四种部署模式单机模式主从模式数据同步的方式全量数据同步增量数据同步 Redis哨兵模式总结缺点&#xff1a;哨兵模式应用sentinel.conf配置项 REF 个人主页: 【⭐️个人主页】 需要您的【&#x1f496; 点赞关注】支持…

geoserver发布同一字段的多值渲染

Geoserver之同一字段的多值渲染 有时候我们需要对一个shp的某一字段值中的不同值进行区分展示&#xff0c;但是一般的渲染都是按照统一图层展示的&#xff0c;因此为了更好的效果&#xff0c;我们选择使用uDig等工具处理。 文章目录 Geoserver之同一字段的多值渲染前言一共是分…

【HarmonyOS】HarmonyOS Test测试用例中一些断言API的使用

【关键词】 单元测试框架、HarmonyOS Test、assertThrowError、assertFail、assertEqual 【测试代码及测试结果展示】 这里以新建API9工程自动生成的ohosTest来编写单元测试代码。 1、 测试代码&#xff1a; import { describe, it, expect } from ohos/hypium import abil…

本地电脑如何连接使用腾讯云服务器

如何连接使用腾讯云服务器 在自己的电脑上&#xff0c;单击 &#xff0c;在搜索中&#xff0c;输入 mstsc&#xff0c;按 Enter&#xff0c;打开远程桌面连接对话框。如下图所示&#xff1a; 在“计算机”后面&#xff0c;输入 服务器的公网 IP&#xff0c;就是上节大图左侧…

十三、W5100S/W5500+RP2040树莓派Pico<FTP Server>

文章目录 1. 前言2. 相关简介2.1 简述2.2 原理2.3 优点2.4 应用 3. WIZnet以太网芯片4. FTP Server运行测试4.1 程序流程图4.2 测试准备4.3 连接方式4.4 相关代码4.5 测试现象 5. 注意事项6. 相关链接 1. 前言 在当今的信息化时代&#xff0c;互联网已经成为人们生活、工作不可…

7天入门python系列之第二天python 基础语法

第2天主要是学习Python的基础知识 编者打算开一个python 初学主题的系列文章&#xff0c;用于指导想要学习python的同学。关于文章有任何疑问都可以私信作者。对于初学者想在7天内入门Python&#xff0c;这是一个紧凑的学习计划。但并不是不可完成的。第二天开始python 基础知…

查分小程序,教学大作用

数字化时代&#xff0c;技术已经深深的改变了我们的生活和工作方式。当然&#xff0c;教育领域也不例外。如果你是一位老师&#xff0c;你可能会想知道如何利用这些技术工具来提高学生的学习体验和成绩。今天&#xff0c;我们就来聊聊如何用各种代码、Excel等工具&#xff0c;打…

Redis系列-Redis集群模式【8】

目录 Redis系列-Redis集群模式【8】特性Redis的数据分区虚拟槽分区Redis虚拟槽分区的特点客户端如何定位目标节点&#xff1f; 故障转移故障检测故障转移 Redis一致性保证Redis集群的功能限制部署命令REF 个人主页: 【⭐️个人主页】 需要您的【&#x1f496; 点赞关注】支持 &…

LeetCode148.排序链表

看完题目的想法是&#xff0c;直接把所有节点的值都遍历出来放进优先队列里面&#xff0c;然后从头节点遍历一次&#xff0c;每次把优先队列poll()的值赋给节点的val即可&#xff0c;说实话&#xff0c;想完还觉得估计有问题怎么可能这么简单&#xff0c;但是不管了&#xff0c…

怎么调整excel表里面所有单元格中,某个相同字体大小,单元格中其他文字大小不变?

环境: excel 2021 python3.8 问题描述: 怎么调整excel表里面所有单元格里面1这个字体大小,单元格里面其他文字不变? excel表里面。很多单元格都有1,1和文字都是10号字体,现在想把全部1字字体调整为16号其他字大小都不变 解决方案: 一、使用python来实现,经过测…

CocosCreator3.8原生引擎源码研究

1. Cocos Creator引擎架构图 2. 原始引擎源码流程图 图还在细化扩充&#xff0c;后续逐渐更新。。。

【学习笔记】MySQL死锁及热点行问题

目录 案例优化思路死锁的一些记录笔记热点行问题 本文记录下关于MySQL优化的学习和一点点思考。 案例 一个并发比较大的下单接口&#xff1b; 包括 step1 扣减商品库存step2 生成订单数据step3 记录操作记录 伪代码如下&#xff0c;底层使用的是MySQL数据库&#xff0c;单体服务…

MySQL 8.0 Clone 备份恢复演练

文章目录 前言1. 恢复目标2. 环境说明3. 克隆数据4. 恢复全量数据5. 注册增量日志6. 应用增量日志 后记 前言 上一篇文章中&#xff0c;我们介绍了使用 Clone 插件进行备份&#xff0c;相关的恢复流程将在本篇文章介绍。 MySQL 8.0 Clone Plugin 详解 恢复增量数据的方法&…

前端瀑布流怎么布局

假设你需要把页面搭建成这样&#xff0c;有两列元素&#xff0c;每个元素宽度一定&#xff0c;高度不一定。如何实现&#xff1f; 这种瀑布流布局有很多实现方式&#xff0c;比如Grid布局。 什么是Grid布局 Grid布局是一种很灵活的布局方式&#xff0c;他把你的页面划分成了很…

[ACTF2020 新生赛]BackupFile 1

题目环境&#xff1a; 好好好&#xff0c;让找源文件是吧&#xff1f;咱们二话不说直接扫它后台 使用dirsearch工具扫描网站后台&#xff08;博主有这个工具的压缩包&#xff0c;可以私聊我领取&#xff09;python dirsearch.py -u http://0d418151-ebaf-4f26-86b2-5363ed16530…

ZYNQ_project:key_beep

通过按键控制蜂鸣器工作。 模块框图&#xff1a; 时序图&#xff1a; 代码&#xff1a; /*1位按键消抖 */ module key_filter (input wire sys_clk ,input wire sys_rst_n ,input wire key_in ,output …

C语言计算1,2,3…100的和

完整代码&#xff1a; // 计算 1&#xff0c;2&#xff0c;3…100 的和。 #include<stdio.h>int main() {int sum0;for (int i 1; i < 100; i){sumi;}printf("1&#xff0c;2&#xff0c;3…100 的和为&#xff1a;%d",sum);return 0; }运行截图&#xff…

【hcie-cloud】【3】华为云Stack规划设计之华为云Stack交付综述【上】

文章目录 前言华为云Stack交付综述交付流程华为云Stack交付流程华为云Stack安装部署流程 交付工具链华为云Stack交付工具链eDesigner - 让解决方案销售更智能eDesigner配置页面 - 基本信息eDesigner配置页面 - 服务及组网配置eDesigner配置页面 - 弹性云服务器/ECSeDesigner配置…