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

成都建设网站费用站长之家素材网

成都建设网站费用,站长之家素材网,如何汇报网站建设,桂林漓江介绍1.背景 应用使用了uniapp开发跨端应用,在uniapp中内嵌webview页面实现页面热更新效果,不需要用户单独重新安装软件即可实现页面的版本更新。 2.webview通知uniapp 在开发过程中我们难会遇到需要uniapp和webview来实现数据通信的场景,接下来…

1.背景

应用使用了uniapp开发跨端应用,在uniapp中内嵌webview页面实现页面热更新效果,不需要用户单独重新安装软件即可实现页面的版本更新。

2.webview通知uniapp

在开发过程中我们难会遇到需要uniapp和webview来实现数据通信的场景,接下来介绍一种可行的uniapp和webview的数据通信方案。
在webview中我们可以使用当前webview实例的postMessage方法来触发webview组建的onPostMessage方法来传递数据,重点就需要放在了如何将uniapp的webview实例来加入到webview的h5项目当中。

uniapp官方文档中指出可以使用uni.webview.js 这个js SDK 来将当前的uni对象注入到webview所加载的H5项目当中。

最新版地址:https://gitcode.net/dcloud/uni-app/-/raw/dev/dist/uni.webview.1.5.6.js;

1.UniAppJSBridgeReady :

这个是在引入webview的SDK之后,当webview页面被加载完成之后会触发,该事件触发表示着uniapp和webview之间的桥成功搭建,uni对象被成功的注入到当前H5的上下文中。
我们在index.html文件中将SDK引入,这里的SDK引入必须放在body标签下面。

<!DOCTYPE html>
<html lang="zh-CN"><head>...</head><body><noscript><strong>Please enable JavaScript to continue.</strong></noscript><div id="app"></div><!-- built files will be auto injected --></body><!-- uni 的 SDK --><!-- 需要把 uni.webview.1.5.6.js 下载到自己的服务器 --><script type="text/javascript" src="https://gitcode.net/dcloud/uni-app/-/raw/dev/dist/uni.webview.1.5.6.js"></script><script>document.addEventListener('UniAppJSBridgeReady', function() {uni.webView.getEnv(function(res) {console.log('当前环境:' + JSON.stringify(res));});// uni.webView.navigateTo(...)});</script>
</html>

2.webview中可用的uni API

方法名说明平台差异说明
uni.navigateTonavigateTo
uni.redirectToredirectTo
uni.reLaunchreLaunch
uni.switchTabswitchTab
uni.navigateBacknavigateBack
uni.postMessage向应用发送消息抖音小程序不支持、H5 暂不支持(可以直接使用 window.postMessage
uni.getEnv获取当前环境抖音小程序与飞书小程序不支持

3.发送消息

我们在H5中可以使用uni.postMessage方法来向应用发送消息,应用中的webview的onPostMessage方法会被触发,从而通过参数就可以拿到需要传递的数据。
或者因为可以使用uni.webView获取到当前webview实例,调用实例postMessage方法也可以传递数据。
注意: 这种做法在H5端是不支持的,后续会介绍H5端的处理方式。

3.uniapp 通知webview

uniapp通知webview页面,官方提供了一种巧妙地方式。在H5项目中全局暴露一个用于接收数据的函数,然后在uniapp中去触发这个函数将参数传递过去即可是实现数据的传递。

evalJS

uniapp为每一个webview组件实例挂载了一个evalJS方法,用于为webview页面注入一个可执行的js脚本代码。这段代码会在webview的全局作用域中执行。我们使用evalJS来触发一个特定的函数,在H5的全局作用域中定义对应的函数,并提前写好对应的数据处理逻辑。后续只需要在uniapp中触发evalJS即可实现数据的传递。

注意:这种方式在H5端也是不支持的,后续会介绍。

4.H5中实现数据的通信

上述介绍的webview和uniapp的通信只针对于uniapp编译的代码是非H5环境,如果是H5环境则无效。因此使用postMessage 方案替代
postMessage
window.postMessage 是一个非常强大的 Web API,用于在不同窗口或内嵌页面(如 <iframe>)之间安全地传递消息。它允许跨源通信,即不同域名、协议或端口的页面之间可以互相发送消息。
window.postMessage 方法允许一个窗口向另一个窗口发送消息。消息的接收方可以通过监听 message 事件来接收消息。为了确保安全性,postMessage 方法需要明确指定目标窗口的来源(targetOrigin),以防止消息被发送到不安全的地址。
主页面

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Main Page</title></head><body><h1>Main Page</h1><iframe id="myIframe" src="https://other-origin.com/iframe.html" width="600" height="400"></iframe><button id="sendMessage">Send Message to Iframe</button><script>// 获取 iframe 的引用const iframe = document.getElementById('myIframe');// 监听按钮点击事件,向 iframe 发送消息document.getElementById('sendMessage').addEventListener('click', () => {// 确保 iframe 已加载完成if (iframe.contentWindow) {iframe.contentWindow.postMessage('Hello from main page!', 'https://other-origin.com');}});// 监听来自 iframe 的消息window.addEventListener('message', (event) => {// 验证来源if (event.origin !== 'https://other-origin.com') return;console.log('Received message from iframe:', event.data);});</script></body>
</html>

内嵌页面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Iframe Page</title>
</head>
<body><h1>Iframe Page</h1><button id="sendMessage">Send Message to Main Page</button><script>// 监听按钮点击事件,向主页面发送消息document.getElementById('sendMessage').addEventListener('click', () => {// 向父窗口发送消息window.parent.postMessage('Hello from iframe!', '*');});// 监听来自主页面的消息window.addEventListener('message', (event) => {// 验证来源if (event.origin !== 'http://main-page-origin.com') return;console.log('Received message from main page:', event.data);});</script>
</body>
</html>
http://www.cadmedia.cn/news/9554.html

相关文章:

  • 做网站需要融资seo搜索引擎优化试题
  • 烟店网站建设注册域名查询网站官网
  • 嘉祥住房和城乡建设局网站广州疫情已经达峰
  • 坂田网站建设服务项目企业seo推广外包
  • 怎么只做自己的电商网站关键词首页排名优化公司推荐
  • 网站建设功能要求新产品宣传推广策划方案
  • 找别人做网站注意什么深圳开发公司网站建设
  • 网站代理制作沧州网络推广外包公司
  • 门头沟高端网站建设新浪体育nba
  • 网站建设犀牛视频网站推广
  • 建设门户网站的意义哈尔滨新闻头条今日新闻
  • 建设020网站需要多少钱网络客服
  • 开发一款app大概多少钱推广学院seo教程
  • wordpress分享可见seo接单
  • 市政府网站建设会议网站建设公司大全
  • 关于公司网站建设的请示中国联通业绩
  • 北京营销型网站推广hyein seo是什么牌子
  • 淄博手机网站建设正规电商培训班
  • 郑州手机网站建设价格明细表企业网络营销策略分析
  • 做任务用手机号登录网站谷歌play商店官网
  • 做网站怎么做起来的武汉武汉最新
  • 建设网站的功能包括哪些石家庄头条今日头条新闻
  • 政府网站建设经费预算方案seo网站关键词优化多少钱
  • 简洁大方网站建设微信营销推广软件
  • 坪山网站建设渠道成功的营销案例及分析
  • 做微信公众号的网站吗百度指数功能模块有哪些
  • 学做美食视频网站重庆seo排
  • 网络公关公司电话网站seo优化方案设计
  • 如何做微信小程序开发seo关键字优化软件
  • 宝安住房和建设局网站电话百度seo点击器