uniapp展示本地swf格式文件,实现交互
概览
uniapp打包的Android项目实现本地swf格式文件的展示,并且能够进行交互
需求分析
1、因为是打包的Android项目展示本地的swf文件,首先需要拿到这个本地的swf文件路径
2、如何在uniapp的vue页面中展示swf,因为没有直接展示swf文件的标签/组件,考虑使用web-view组件来进行展示swf文件
3、直接使用web-view组件无法展示swf,使用html先展示swf,然后把html链接放到web-view中进行展示
4、html中如何展示swf,把swf转为html来进行展示这个swf文件(使用开源的js实现,下载地址:https://download.csdn.net/download/ahualong1/89900202)
具体实现
1、flashPage.vue页面
<template><view :style="{height: screenHeight + 'px'}"><!-- <titleViewVue :titleName="titleName" class="VideoTitleViewClass"></titleViewVue> --><web-view :src="url" @message="handlePostMessage"></web-view></view>
</template><script>import titleViewVue from '../../components/titleView/titleView.vue'import {uploadStudyTime} from '@/api/api.js'export default {components: {titleViewVue},data() {return {titleName: '',//标题SubjectId: '',videoSrc: '',//视频资源本地地址videoHeight: '',videoWidth: '100%',screenHeight: '',startTime: 0,fileUrl: '',url: ''}},onLoad(option) {this.startTime = Date.now()this.screenHeight = getApp().globalData.screenHeight;// 定义视频URLthis.titleName = option.titleName?option.titleName:''this.SubjectId = option.SubjectId + ''this.fileUrl = option.urlthis.url = '/static/flash.html?filePath=' + plus.io.convertLocalFileSystemURL(this.fileUrl) + '&titleName=' + this.titleName},onUnload() {if(!getApp().globalData.isGuest){this.uploadSduyTimePage()} },methods: {uploadSduyTimePage(){var upLoadTime = {"subject_id": this.SubjectId,"date": this.$utils.formatDateTime(),"time": Date.now() / 1000 - this.startTime / 1000}this.startTime = 0const arryUpload = []arryUpload[0] = upLoadTimeuploadStudyTime({"data": arryUpload}).then(res=>{if(res.data.code == 200 && res.data.status == 'success'){}else{if(uni.getStorageSync('uploadTime')){arryUpload = []arryUpload = uni.getStorageSync('uploadTime')arryUpload.push(upLoadTime)uni.setStorageSync('uploadTime',arryUpload)}else{arryUpload = []arryUpload.push(upLoadTime)uni.setStorageSync('uploadTime',arryUpload)}}})},handlePostMessage(){uni.navigateBack()}}}
</script><style></style>
码中fileUrl 为uni.saveFile()保存到本地的路径,直接打开是无法展示的,需要使用plus的api:plus.io.convertLocalFileSystemURL(this.fileUrl) 将本地文件系统的URL转换为跨域可以访问的URL
2、flash.html的具体代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><title>SWFObject 2 dynamic publishing example page</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><script type="text/javascript" src="swf2js.js"></script></head><body><div style="width: 100%;height: auto;display: flex;align-items: center;justify-content: space-between;flex-direction: row;padding: 8px;background-color: #87B5F9;"><img src="leftarrow.png" style="height: 20px;" id="backClickId" /><div style="flex: 1;display: flex;align-items: center;justify-content: center;"><div id="titleNameId" style="color: #FFFFFF;font-size: 20px;"></div></div></div></body><!-- 微信 JS-SDK 如果不需要兼容小程序,则无需引用此 JS 文件。 --><!-- <script type="text/javascript" src="//res.wx.qq.com/open/js/jweixin-1.6.0.js"></script> --><!-- uni 的 SDK,必须引用。 --><script type="text/javascript" src="../hybrid/html/web/uni.webview.js"></script><script type="text/javascript">document.getElementById('backClickId').addEventListener('click', function() {uni.postMessage({data: {"back": true}});});window.onload = function() {if(location.href.includes('filePath')){swf2js.load(getParameterByName('filePath', ''))}if (location.href.includes('titleName')) {document.getElementById('titleNameId').textContent = getParameterByName('titleName', '');} else {document.getElementById('titleNameId').textContent = '模拟训练';}};function getParameterByName(name, url) {if (!url) url = location.href;name = name.replace(/[\[\]]/g, '\\$&');var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),results = regex.exec(url);if (!results) return null;if (!results[2]) return '';return decodeURIComponent(results[2].replace(/\+/g, ' '));}</script>
</html>
其中uni.postMessage 是web-view向uniapp.vue传递消息
document.getElementById('backClickId').addEventListener('click', function() {uni.postMessage({data: {"back": true}});});
swf2js.load(getParameterByName('filePath', ''))为加载本地swf格式的资源代码
需要引入<script type="text/javascript" src="swf2js.js"></script>
方法getParameterByName 是获取打开的链接获取参数的方法
运行项目到模拟器或真机进行展示swf,就OK了。
可以查看项目中 pages-> flashPage->flashPage.vue页面
项目地址:https://download.csdn.net/download/ahualong1/89900184
参考开源项目:GitCode - 全球开发者的开源社区,开源代码托管平台
相关文章:
uniapp展示本地swf格式文件,实现交互
概览 uniapp打包的Android项目实现本地swf格式文件的展示,并且能够进行交互 需求分析 1、因为是打包的Android项目展示本地的swf文件,首先需要拿到这个本地的swf文件路径 2、如何在uniapp的vue页面中展示swf,因为没有直接展示swf文件的标…...
ZYNQ:流水灯实验
实验目的 PL_LED0 和 PL_LED1 连接到 ZYNQ 的 PL 端,PL_LED0 和 PL_LED1循环往复产生流水灯的效果,流水间隔时间为 0.5s。 原理图 程序设计 本次实验是需要实现两个LED的循环熄灭点亮,时间间隔是0.5S,对时间间隔的控制使用计数器来完成。本…...
StratoVirt中vCPU拓扑(SMP)配置与实现的深度解析
tratoVirt作为计算产业中面向云数据中心的企业级虚拟化平台,通过一套统一的架构支持虚拟机、容器和Serverless三种场景。它不仅在轻量低噪、软硬协同和Rust语言级安全等方面具备关键技术竞争优势,还预留了接口和设计来支持更多特性,并向着标准…...
Xml 相关注解使用
XmlRootElement XmlAccessorType(XmlAccessType.FIELD) 在 Java 中,XmlRootElement 和 XmlAccessorType 是用于 JAXB(Java Architecture for XML Binding)库的注解。它们帮助开发人员将 Java 对象映射到 XML 格式,反之亦然。下面对…...
本地时间与时区时间转化(以Helpdesk和BPI Challenge 2012为例)
数据集:Helpdesk 数据来源:https://data.4tu.nl/datasets/94ee26c8-78f6-4387-b32b-f028f2103a2c/1 描述问题:此数据三列属性皆为object,此为本地时间,只需关注时间格式的变化。 经过格式转化, 数据集&am…...
Golang | Leetcode Golang题解之第482题秘钥格式化
题目: 题解: func licenseKeyFormatting(s string, k int) string {ans : []byte{}for i, cnt : len(s)-1, 0; i > 0; i-- {if s[i] ! - {ans append(ans, byte(unicode.ToUpper(rune(s[i]))))cntif cnt%k 0 {ans append(ans, -)}}}if len(ans) &…...
代码随想录 -- 贪心 -- 无重叠区间
435. 无重叠区间 - 力扣(LeetCode) 思路:与上一题十分相似。 依然按照左边界从小到大对数组排序,初始化删除的区间数为0; 从1遍历数组:如果当前区间的左边界小于上一个区间的右边界,说明这两…...
sql server xml
参考SQL Server XML学习笔记 - 缥缈的尘埃 - 博客园...
WPF中MVVM的应用举例
WPF(Windows Presentation Foundation)是微软开发的用于创建用户界面的框架,而MVVM(Model-View-ViewModel)模式是一种分离前端UI逻辑与后台业务逻辑的方法。在WPF中使用MVVM模式可以提高代码的可维护性、可测试性和可扩…...
编程题 7-24 约分最简分式【PAT】
文章目录 题目输入格式输出格式输入样例输出样例 题解解题思路完整代码 编程练习题目集目录 题目 分数可以表示为分子/分母的形式。编写一个程序,要求用户输入一个分数,然后将其约分为最简分式。最简分式是指分子和分母不具有可以约分的成分了。如 6 /…...
尚硅谷大数据Flink1.17实战教程-笔记04【Flink DataStream API】
尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】视频地址:尚硅谷大数据Flink1.17实战教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据Flink1.17实战教程-笔记01【Flink 概述、Flink 快速上手】尚硅谷大数据Flink1.17实战教程-笔记02【Flink 部署】尚硅…...
MySQL常见优化策略
MySQL 是一种广泛使用的开源数据库管理系统,性能的优化对于应用程序的效率至关重要。以下是一些常见的 MySQL 优化策略,帮助提高数据库性能和响应速度。🚀 1. 合理的索引设计 使用索引:确保在常用的查询条件(如 WHER…...
gyp ERR stack Error: Command failed: D:\python\python.EXE -c import sys; print
文章目录 1、问题描述 2、解决方案 1、问题描述 网上clone的开源项目在执行npm install的时候报错如下: 2、解决方案 经过多方查证,后来发现是python的版本太高了,我重新配置了个python2.7的环境变量就好了。 …...
代码随想录day6| 242.有效的字母异位词 、349. 两个数组的交集、 202. 快乐数 、 1. 两数之和
代码随想录day6| 242.有效的字母异位词 、349. 两个数组的交集、 202. 快乐数 、 1. 两数之和 242.有效的字母异位词思路步骤 349. 两个数组的交集思路步骤 202. 快乐数思路步骤 1. 两数之和思路步骤 242.有效的字母异位词 思路 使用暴力解法时间复杂度为O(n^2)这道题需要判断…...
《IDE 巧用法宝:使用技巧全解析与优质插件推荐》
在日常撸代码的时候,相信兄弟们在IDEA 中用到不少插件,利用插件,不仅可以提高工具效率,撸起代码来,也格外的娃哈哈…… 一、IntelliJ IDEA 作为一个资深 Java 程序员,除了 IDEA 中默认的插件,我…...
安全见闻---清风
注:本文章源于泷羽SEC,如有侵权请联系我,违规必删 安全见闻1 泷哥语录:安全领域什么都有,不要被表象所迷惑,无论技术也好还是其他方面也好,就是说学习之前,你得理解你要学的是什么…...
Python爬虫:urllib_post请求百度翻译(06)
#post的请求 import urllib.request import urllib.parse import jsonurl https://fanyi.baidu.com/sugheaders {user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36}data {kw : spider }#post请…...
GPIO输入和输出
参考视频:2.1 [GPIO]4种输出模式_哔哩哔哩_bilibili 输出:通过写0或者写1,控制引脚输出低电压或高电压。 输入:通过读取引脚是0还是1,判断引脚输入的是高电压还是低电压。 输出 推挽开漏通用通用输出推挽通用输出开漏…...
时序动作定位 | DDG-Net:弱监督时间动作定位的判别驱动图网络(ICCV 2023)
"><DDG-Net: Discriminability-Driven Graph Network for Weakly-supervised Temporal Action Localization> 代码:https://github.com/XiaojunTang22/ICCV2023-DDGNet 这篇论文探讨了弱监督时间动作定位(WTAL)任务,指出现有方法在特征提取时依赖于在其他数…...
mapbox没有token/token失效,地图闪烁后变空白,报错Error: A valid Mapbox access token is required to use Mapbox GL JS.
目录 mapbox没有token/token失效,地图闪烁后空白,报错Error: A valid Mapbox access token is required to use Mapbox GL JS. 一、问题描述 二、mapbox去除token验证 1、找到mapbox-gl文件夹 2、找到mapbox-gl.js文件 3、找到对应位置并修改 4、清…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
