iframe引起ios移动端二维码长按不识别问题

废话不多说,上代码

首先在body里创建img标签

var img = document.createElement("img");
img.className = "qrcode-img";
img.id = "qrcode-img";
img.draggable = false;//这个必须要
img.style = "position: fixed;opacity: 0;z-index: -1;display: none;";
window.document.body.appendChild(img);

然后在父页面接受子页面(iframe)的postmessage事件

window.addEventListener("message", function (e) {
          var data = {}
          data = JSON.parse(JSON.stringify(e.data))
          if (data.type === 'img:show') {
            console.log(data)
            // img:show时将图片置于顶层, 并设置src为含有二维码的图片地址
            var qrImg = document.getElementById("qrcode-img")
            var iframe = document.getElementById("cyyiframe")//获取iframe
            var top = data.content.top + iframe.getBoundingClientRect().y;
            var left = data.content.left + iframe.getBoundingClientRect().x;
            qrImg.setAttribute('src', data.content.src);
            qrImg.style = `display: block;position: fixed;top: ${top}px;left: ${left}px;width: ${data.content.width}px;height: 
            ${data.content.height}px;opacity: 0;z-index: 10001;`
          }
          if (data.type === 'img:hide') {
            console.log(data)
            // img:hide时将,将图片置于底层
            var qrImg = document.getElementById("qrcode-img")
            qrImg.removeAttribute('src');
            qrImg.style = 'position: fixed;opacity: 0;z-index: -1;display: none;'
          }
}

注意:

在子页面(iframe)中判断当前设备类型,ios端再发postmessage事件,避免安卓端不识别。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容