ios怎样调用html5二维码生成_ios生成二维码html5法【步骤】

9次阅读

ios不能直接用html5生成二维码,实际依赖javaScript库(如qrcode.js)在WKwebview中绘制canvas/svg;原生推荐使用CIFilter(“CIQRCodeGenerator”),需ISO-8859-1编码、缩放CIImage并校正方向。

ios怎样调用html5二维码生成_ios生成二维码html5法【步骤】

iOS里不能直接用html5生成二维码?

HTML5本身不提供二维码生成功能,所谓“HTML5生成二维码”实际是靠javascript库(比如qrcode.jsqr-code-generator)在网页中绘制Canvas或SVG。iOS原生app调用这类能力,必须通过WKWebView加载含JS二维码逻辑的HTML页面——不是iOS系统API,而是Web方案嵌入。

WKWebView中加载本地HTML+JS生成二维码

这是最常用、可控性最强的做法。把生成逻辑完全交给前端,iOS只负责展示和传参。

  • qrcode.min.js和一个简单HTML(含)放在xcode工程的Bundle Resources
  • WKWebView加载本地HTML:
    let url = Bundle.main.url(forResource: "qrcode", withExtension: "html")! webView.loadFileURL(url, allowingReadaccessTo: url.deletingLastPathComponent())
  • evaluateJavaScript(_:completionHandler:)向页面传入内容:
    webView.evaluateJavaScript("generateQRCode('(text)')")

    ,前提是HTML里已定义好generateQRCode函数

  • 注意:iOS 14+对file://协议限制变严,必须用allowingReadAccessTo:指定可读路径,否则JS无法加载本地资源或报DOMException: The operation is insecure

原生swift生成再转成UIImage,比Web更稳

如果只是要一张图,别折腾WebView。iOS原生有CIFilter(name: "CIQRCodeGenerator"),速度快、无依赖、兼容性好(iOS 8+)。

  • 输入字符串需先转成NSData并用iso-8859-1编码(UTF-8可能出错):
    text.data(using: .isoLatin1)!
  • 滤镜输出是CIImage,默认尺寸很小(约30×30像素),必须手动缩放:
    ciImage.transformed(by: CGAffineTransform(scaleX: 10, y: 10))
  • 生成后转UIImage时注意方向:CIImage坐标系Y轴向上,UIImage向下,要用.oriented(.up)避免倒置
  • 不用引入任何第三方库,也不依赖网络或JS执行环境,适合离线场景或对启动速度敏感的App

常见坑:Canvas导出图片在iOS上模糊或空白

如果坚持用WebView方案,Canvas生成后调toDataURL()取图片base64,在iOS上容易失败:

立即学习前端免费学习笔记(深入)”;

  • toDataURL("image/png")在某些WKWebView版本返回空字符串——改用toBlob() + FileReader读取更可靠
  • Canvas未设置width/height属性(仅css设大小),会导致渲染模糊;必须显式写canvas.width = 200; canvas.height = 200;
  • iOS safaricanvas.toDataURL()有MIME类型校验,传"image/jpeg"可能被拒绝,统一用"image/png"
  • WKWebView默认禁用localStorage等API,若JS库依赖它(如某些老版qrcode.js),需在WKWebViewConfiguration里开启:
    configuration.websiteDataStore = .nonPersistent()

原生生成二维码那块,CIQRCodeGeneratorinputCorrectionLevel参数容易被忽略,默认是L(7%容错),但扫不出码时,不妨试试MQ——不是所有扫码器都严格遵循标准。

text=ZqhQzanResources