java之学习记录 8 - 1 - 解决扫码登录二维码在谷歌浏览器的bug

3 篇文章 0 订阅

微信扫码登录跳转

谷歌浏览器调试的时候,iframe标签跨域问题导致无法跳转的bug

如果iframe未添加sandbox属性,或者sandbox属性不赋值,就代表采用默认的安全策略

即:iframe的页面将会被当做一个独立的源,并且不能提交表单,不能执行javascript脚本,也不

能让包含iframe的父页面导航到其他地方,所有的插件,如flash等也全部不能起作用

简单来说iframe就只剩下一个展示数据的功能,正如他的名字一样,所有的内容都被放进了一个 “单独的沙盒”

  • sandbox包含的属性及作用:
属性值
说明
allow-scripts
允许运行执行脚本
allow-top-navigation
允许 iframe 能够主导 window.top 进行页面跳转
allow-same-origin
允许同域请求 , 比如 ajax,storage
allow-forms
允许进行提交表单
allow-popups
允许 iframe 中弹出新窗口 , 比如 ,window.open,target=”_blank”
allow-pointer-lock
iframe中可以锁定鼠标,主要和鼠标锁定有关
  • 加上 sandbox=“allow-scripts allow-top-navigation allow-same-origin” 属性,即可解决
  • 官方jshttp://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js
  • 无法修改微信服务器上的js文件,所以我们将js代码放在本地并进行修改:
created() {
    !(function(a, b, c) {
      function d(a) {
        var c = "default";
        a.self_redirect === !0
          ? (c = "true")
          : a.self_redirect === !1 && (c = "false");
        var d = b.createElement("iframe"),
          e =
            "https://open.weixin.qq.com/connect/qrconnect?appid=" +
            a.appid +
            "&scope=" +
            a.scope +
            "&redirect_uri=" +
            a.redirect_uri +
            "&state=" +
            a.state +
            "&login_type=jssdk&self_redirect=" +
            c +
            "&styletype=" +
            (a.styletype || "") +
            "&sizetype=" +
            (a.sizetype || "") +
            "&bgcolor=" +
            (a.bgcolor || "") +
            "&rst=" +
            (a.rst || "");
        (e += a.style ? "&style=" + a.style : ""),
          (e += a.href ? "&href=" + a.href : ""),
          (d.src = e),
          (d.frameBorder = "0"),
          (d.allowTransparency = "true"),
          (d.sandbox = "allow-scripts allow-top-navigation allow-same-origin"), // 允许多种请求
          (d.scrolling = "no"),
          (d.width = "300px"),
          (d.height = "400px");
        var f = b.getElementById(a.id);
        (f.innerHTML = ""), f.appendChild(d);
      }
      a.WxLogin = d;
    })(window, document);
  },

html部分

<div id="wxLoginForm"></div>
 methods: {
     // 点击微信登录调用方法
     goToLoginWX() {
      // 普通的登录表单隐藏
      document.getElementById("loginForm").style.display = "none";
      // 显示二维码
      document.getElementById("wxLoginForm").style.display = "block";
      
      // 生成二维码
      this.$nextTick(function() {
        this.createCode(); // 直接调用会报错:TypeError: Cannot read property 'appendChild' of null
      });
    },

    createCode() {
      // 生成登录二维码
      var obj = new WxLogin({
        id:"wxLoginForm",// 挂载点 二维码的容器
        appid: "", // 应用唯一标识,在微信开放平台提交应用审核通过后获得
        scope: "snsapi_login", // 应用授权作用域,网页应用目前仅填写snsapi_login即可
        redirect_uri: "", // 重定向地址 (回调地址) 
  href:"data:text/css;base64,LmltcG93ZXJCb3ggLnFyY29kZSB7d2lkdGg6IDIwMHB4O30gLmltcG93ZXJCb3ggLnRpdGxlIHtkaXNwbGF5OiBub25lO30gLmltcG93ZXJCb3ggLmluZm8ge3dpZHRoOiAyMDBweDt9IC5zdGF0dXNfaWNvbiB7ZGlzcGxheTogbm9uZX1jcyAuaW1wb3dlckJveCAuc3RhdHVzIHt0ZXh0LWFsaWduOiBjZW50ZXI7fQ==" // 加载修饰二维码的css样式
      });
    },

     
  }

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值