记录一下最近的工作难点,之一...

首先本项目使用的是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内置浏览器中无法显示问题的更多相关文章

  1. 【thinkphp5.1】 endroid/qrcode 二维码生成

    composer 链接: https://packagist.org/packages/endroid/qrcode 注意:PHP版本 要求 7.1+ 1. 使用 composer 安装 endroi ...

  2. 使用扫描二维码打开app

    应该不少人遇到过这种需求,扫描二维码打开app如果用户没有这个app则提示它跳转. 用网页直接来调用app是不打可能的,必须原生那边先做一些配置. 首先,安卓和苹果的调用方法是不同的. 所以我们需要先 ...

  3. iOS - QRCode 二维码

    1.QRCode 在 iOS7 以前,在 iOS 中实现二维码和条形码扫描,我们所知的有,两大开源组件 ZBar 与 ZXing. 这两大组件我们都有用过,这里总结下各自的缺点: 1.ZBar 在扫描 ...

  4. (转)QRCODE二维码介绍及常用控件推荐

    什么是QR Code码? QR Code码是由日本Denso公司于1994年9月研制的一种矩阵二维码符号,它具有一维条码及其它二维条码所具有的信息容量大.可靠性高.可表示汉字及图象多种文字信息.保密防 ...

  5. 手机扫描二维码下载APP,根据操作系统不同自动下载

    Android和IOS手机扫描二维码下载APP,根据OS不同,自动处理相应下载操作.IOS自动跳转至AppStore应用下载页,Android自动下载应用的apk包. <script type= ...

  6. 生成扫描二维码下载app的二维码的方法

    进入APP store苹果应用程序商店,根据分类找到你要生成二维码的APP,然后在浏览器连接里找到ID后的一串数字就是APP的应用ID了. 安卓系统的appid 在电脑浏览器中打开应用宝官网,http ...

  7. jQuery生成QRcode二维码

    jQuery生成QRcode二维码示例 <!DOCTYPE html> <html> <head> <meta charset="utf-8&quo ...

  8. PHP生成QRCode二维码

    php生成QRCode二维码示例 <?php //引入 phpqrcode 类库 //phpqrcode下载地址:https://github.com/t0k4rt/phpqrcode //或从 ...

  9. 用CIFilter生成QRCode二维码图片

    用CIFilter生成QRCode二维码图片 CIFilter不仅仅可以用来做滤镜,它还可以用来生成二维码. CIFilterEffect.h + CIFilterEffect.m // // CIF ...

  10. 用Java画QRCode二维码

    支付宝.微信扫码支付的二维码,第三方的类库QRCode.jar 还是很好用的.下面贴出来这个东东生成二维码的代码. 使用时注意包括图片地址.编码内容.图片属性等几个参数,支付宝的它们的扫码回调地址. ...

随机推荐

  1. Visual Studio & VS Code

    前言 会写这篇是因为想记入一个 bug. 随便以后记入一些 Visual Studio 和 VS Code 相关的冬冬呗. 当 VS Code Hot Reload 遇上 View Component ...

  2. C# – Record, Class, Struct

    前言 之前在 C# – 10.0 已经有介绍过 Record 了. 但之前还没怎么用到, 最近有用到了, 所以特别写多一篇. Class vs Struct 参考: C#详解struct和class的 ...

  3. 普元中间件Primeton AppServer6.5部署SuperMap iServer

    本文使用Windows环境普元中间件Primeton AppServer6.5(以下简称PAS)部署SuperMap iServer 一.部署前准备 本文使用SuperMap iServer 11.0 ...

  4. 【赵渝强老师】管理Docker镜像

    一.什么是Docker的镜像 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙 ...

  5. template<> 模板特化

    template<> 是用于 模板特化(Template Specialization) 的一种语法. 模板特化允许你为某些特定的模板参数提供不同的实现.例如,template<&g ...

  6. python安装pandas+pytz

    如下图所示,在安装pandas的过程中,发现他还要安装pytz这个包.我不想等他自己下载,因为很容易出错,所以我就先下载了pytz这个包,然后安装完毕,再去安装pandas这个包. 首先呢先登录这个网 ...

  7. vue前端开发仿钉图系列(1)高德地图的使用详解

    最近公司让参考钉图做图层模块相关的功能,很庆幸有机会细细研究地图相关的东西.因为手机端用的是高德地图,web端也使用高德地图.还是和往常一样,先贴上效果图. 步骤1.在高德开放平台注册信息,创建自己的 ...

  8. 云原生周刊:Meshery v0.70 发布 | 2024.1.22

    开源项目推荐 flux-cluster-template 该项目用于部署由 Flux.SOPS.GitHub Actions.Renovate.Cilium 等支持的 Kubernetes 集群,专注 ...

  9. 使用 KubeSphere 实现微服务的灰度发布

    前言 今天来说一说,在 KubeSphere 中两个 " 小姐姐 " 如何来回切换,这是什么意思哩?其实就是互联网产品中常用的灰度发布方式. 互联网产品需要快速迭代上线,既要保证新 ...

  10. 顶点着色网格转换为 UV 映射的纹理化网格

    简介 顶点着色是一种将颜色信息直接应用于网格顶点的简便方法.这种方式常用于生成式 3D 模型的构建,例如 InstantMesh.然而,大多数应用程序更偏好使用 UV 映射的纹理化网格. 本教程将介绍 ...