[天坑]之qrcode二维码在app内置浏览器中无法显示问题
记录一下最近的工作难点,之一...
首先本项目使用的是qrcode-generator,市面上生成二维码的第三方库有很多qrcode.vue、qrcode、QRious等等
<div id="qrcode"></div>
import QRCode from "qrcode-generator";
data() {
return {
tenant: "turnchartenantkey",
url: "",
id: "",
storeObj: {},
};
},
created() {
this.generateQRCode();
// this.drawQrc();
},
methods: {
generateQRCode() {
//省略*****多判断及请求
// 获取容器元素;
const container = document.getElementById("qrcode");
// 创建二维码生成器实例
const qr = QRCode(0, "L");
// 设置二维码内容
this.url = `your url`;
console.log(this.url, "url");
qr.addData(this.url);
qr.make();
// 渲染二维码到容器元素中
container.innerHTML = qr.createSvgTag({
scalable: true,
});
}
//css
#qrcode {
width: 300px;
height: 300px;
margin: 0 auto;
padding: 25px;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
}
看着挺正常的,就是普通的qrcode生成二维码,暗藏玄机

是的,app内置浏览器中无法显示二维码,尝试过各种方法,排除了各种可能导致错误的原因,最后确定在手机可能对svg的编译存在一些误差,要优化代码并使二维码在应用程序的嵌入式浏览器中正常显示,首先需要将其转换为数据 URL 并使用img标签来显示二维码,而不是将二维码呈现为 SVG 直接插入 DOM。这种方法更兼容不同的浏览器和嵌入式 Web 视图。
将模板部分中的<div id="qrcode"></div>替换为。
<img id="qrcode" :src="qrcodeUrl" alt="QRcode">
添加qrcodeUrl到data部分并更新generateQRCode设置二维码数据 URL 的方法,qrcodeUrl而不是直接修改 DOM。
下面是更改后的代码
<template>
<div>
<div class="qr-card">
<div class="qrcode-container">
<div v-if="loading" class="loading-spinner"></div>
<img v-else id="qrcode" :src="qrcodeUrl" alt="QR Code" />
</div>
</div>
</div>
</template> <script>
import QRCode from "qrcode-generator"; export default {
name: "QRcode",
data() {
return {
qrcodeUrl: "",
loading: true,
};
},
created() {
this.generateQRCode();
},
methods: {
generateQRCode() {
const qr = QRCode(0, "L");
this.url = `your url`;
qr.addData(this.url);
qr.make();
const svgTag = qr.createSvgTag({ scalable: true }); // 将 SVG 转换为数据 URL
const svgBlob = new Blob([svgTag], { type: "image/svg+xml" });
const svgUrl = URL.createObjectURL(svgBlob);
this.qrcodeUrl = svgUrl; // 不再需要时释放对象 URL
this.$once("hook:beforeDestroy", () => {
URL.revokeObjectURL(svgUrl);
}); this.loading = false;
},
},
};
</script> <style lang="less" scoped>
* {
box-sizing: border-box;
} .qrcode-container {
width: 300px;
height: 300px;
margin: 0 auto;
padding: 25px;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
} .loading-spinner {
width: 50px;
height: 50px;
border-radius: 50%;
border: 3px solid #ccc;
border-top-color: #333;
animation: spin 1s linear infinite;
} @keyframes spin {
to {
transform: rotate(360deg);
}
}
}
</style>
在此更新的代码中,SVG QR 代码使用转换为数据 URL"URL.createObjectURL"并分配给"qrcodeUrl". 该"URL.revokeObjectURL"方法在组件销毁之前调用以释放对象 URL。<img>然后使用带有qrcodeUrlas属性的标签显示 QR 码src,并且添加加载中loading,该loading属性设置为true,表示加载状态处于活动状态。二维码生成显示成功后,loading设置为false,显示二维码时隐藏加载框。
[天坑]之qrcode二维码在app内置浏览器中无法显示问题的更多相关文章
- 【thinkphp5.1】 endroid/qrcode 二维码生成
composer 链接: https://packagist.org/packages/endroid/qrcode 注意:PHP版本 要求 7.1+ 1. 使用 composer 安装 endroi ...
- 使用扫描二维码打开app
应该不少人遇到过这种需求,扫描二维码打开app如果用户没有这个app则提示它跳转. 用网页直接来调用app是不打可能的,必须原生那边先做一些配置. 首先,安卓和苹果的调用方法是不同的. 所以我们需要先 ...
- iOS - QRCode 二维码
1.QRCode 在 iOS7 以前,在 iOS 中实现二维码和条形码扫描,我们所知的有,两大开源组件 ZBar 与 ZXing. 这两大组件我们都有用过,这里总结下各自的缺点: 1.ZBar 在扫描 ...
- (转)QRCODE二维码介绍及常用控件推荐
什么是QR Code码? QR Code码是由日本Denso公司于1994年9月研制的一种矩阵二维码符号,它具有一维条码及其它二维条码所具有的信息容量大.可靠性高.可表示汉字及图象多种文字信息.保密防 ...
- 手机扫描二维码下载APP,根据操作系统不同自动下载
Android和IOS手机扫描二维码下载APP,根据OS不同,自动处理相应下载操作.IOS自动跳转至AppStore应用下载页,Android自动下载应用的apk包. <script type= ...
- 生成扫描二维码下载app的二维码的方法
进入APP store苹果应用程序商店,根据分类找到你要生成二维码的APP,然后在浏览器连接里找到ID后的一串数字就是APP的应用ID了. 安卓系统的appid 在电脑浏览器中打开应用宝官网,http ...
- jQuery生成QRcode二维码
jQuery生成QRcode二维码示例 <!DOCTYPE html> <html> <head> <meta charset="utf-8&quo ...
- PHP生成QRCode二维码
php生成QRCode二维码示例 <?php //引入 phpqrcode 类库 //phpqrcode下载地址:https://github.com/t0k4rt/phpqrcode //或从 ...
- 用CIFilter生成QRCode二维码图片
用CIFilter生成QRCode二维码图片 CIFilter不仅仅可以用来做滤镜,它还可以用来生成二维码. CIFilterEffect.h + CIFilterEffect.m // // CIF ...
- 用Java画QRCode二维码
支付宝.微信扫码支付的二维码,第三方的类库QRCode.jar 还是很好用的.下面贴出来这个东东生成二维码的代码. 使用时注意包括图片地址.编码内容.图片属性等几个参数,支付宝的它们的扫码回调地址. ...
随机推荐
- sign与unsigned的原理、数据存储与硬件的关系
目录 关键字unsigned和signed 数据在计算机中的存储 原码 与 补码的转化与硬件关系 原,反,补的原理: 整型存储的本质 变量存取的过程 类型目前的作用 十进制与二进制快速转换 大小端字节 ...
- Excel 国产化替换新方案
前言 在当前数字化转型和信创(信息技术应用创新)战略背景下,企业对于安全性.自主可控性和高效办公工具的需求日益增加.作为一款国产自主研发的高性能表格控件,SpreadJS 正成为替换 Excel 的最 ...
- 面试官:谈谈你对 IoC 和 AOP 的理解!
本文摘录自笔者开源的 Java 学习&面试指南(Github 收获146k star):JavaGuide . 这篇文章会从下面从以下几个问题展开对 IoC & AOP 的解释 什么是 ...
- uart loglevel和pr_debug的区别
pr_debug 是 Linux 内核中用于打印调试信息的宏,它的行为会根据编译时的配置有所不同.如果定义了 CONFIG_DYNAMIC_DEBUG 配置选项,pr_debug 会扩展为 dynam ...
- 批量解压zip文件到指定位置
话不多说,直接上代码. # coding:utf-8 import zipfile import utils_file n = 21 # 我事先知道我有多少个文件,所以确定为21 for i in r ...
- iOS中UIlabel多行文本展示使用小结
最近在项目开发中遇到了一个新的需求,就是菜单标题最多两行展示,一行展示的标签顶部和两行展示的标签顶部对齐.看到要求后,第一反应是这是什么奇葩的设计,但是没办法谁让别人是产品经理呢.细细思索后,代码如下 ...
- 在Vue3中如何实现四种全局状态数据的统一管理?
四种全局状态数据 在实际开发当中,会遇到四种全局状态数据:异步数据(一般来自服务端).同步数据.同步数据又分为三种:localstorage.cookie.内存.在传统的 Vue3 当中,分别采用不同 ...
- redis - 认识 nosql 认识 redis 基础 linux安装 redis
sql和nosql的区别 1. 结构化 非结构化 2. 关联的 非关联的 3. sql查询 非 sql 4. 存储方式 磁盘 内存 5.扩展性 垂直 水平 6. 使用场景: 数据结构固定,相关业务 ...
- 鸿蒙 NEXT 如何使用 @Styles 装饰器来优化我的组件代码?
大家好,我是 V 哥.在鸿蒙 NEXT 开发中,@Styles 装饰器是一种非常有用的方法,用于定义可重用的样式.这使得开发者可以将多条样式设置提炼成一个方法,以便在多个组件中复用,从而提高代码的可维 ...
- 云原生周刊:Kubernetes v1.31 发布
开源项目推荐 Kardinal Kardinal 是一个用于在共享 Kubernetes 集群中创建超轻量级临时开发环境的框架. Anteon Anteon(以前称为 Ddosify)是一个开源的.基 ...