- ios15.2 canvas 绘制的toDataURL返回值data;?
代码如图 getVideoBase64(url) { const that = this var dataURL = '' var video = document.createElement('video') video.setAttribute('crossOrigin', 'anonymous') // 处理跨域 video.setAttribute('src', url) video.setAttribute('preload', 'auto') video.play() video.addEventListener('loadeddata', function () { var canvas = document.createElement('canvas') var width = video.videoWidth // canvas的尺寸和图片一样 var height = video.videoHeight canvas.width = width canvas.height = height canvas.getContext('2d').drawImage(video, 0, 0, width, height) // 绘制canvas dataURL = canvas.toDataURL('image/jpeg') // 转换为base64 that.firstImageBase = dataURL that.files.name = that.$moment(new Date()).format('YYYY/MM/DD/HH:mm:ss') + '.jpg' that.files.type = 'image/jpeg' that.postImg() // 这个函数是我上传图片给后台的接口 }) 原本这就该是可以画出来的,安卓上测试是可以的,但是苹果没有反应,于是我一行一打印测试出来苹果真机loadeddata不触发,开发者工具和浏览器 模拟都没有问题,但是真机不进入loadeddata,于是我想了一个这种的方法,先判断机型是不是ios,如果是ios,调用一个回调函数,3秒后执行,差不 多也准备好了 const that = this var dataURL = '' var video = document.createElement('video') video.setAttribute('crossOrigin', 'anonymous') // 处理跨域 video.setAttribute('src', url) video.setAttribute('preload', 'auto') video.play() function fn3(callback) { var i = 0 var timer = window.setInterval(() => { i++ if (i == 1) { clearInterval(timer) if (callback) { callback() } } }, 1000) } if (/iPad|iPhone|iPod/.test(navigator.userAgent)) { fn3(() => { var width = video.videoWidth // canvas的尺寸和图片一样 var height = video.videoHeight var canvas = document.createElement('canvas') // that.alert(width, height) canvas.width = width canvas.height = height canvas.getContext('2d').drawImage(video, 0, 0, width, height) // 绘制canvas try { dataURL = canvas.toDataURL('image/jpeg') // 转换为base64 } catch (err) { console.log(err) } // dataURL = canvas.toDataURL('image/jpeg') // 转换为base64 that.alert(dataURL) console.log(dataURL) that.firstImageBase = dataURL that.files.name = that.$moment(new Date()).format('YYYY/MM/DD/HH:mm:ss') + '.jpg' that.files.type = 'image/jpeg' that.postImg() }) 倒是进去了,但是画出来的图是一张黑色的图,所以又打印dataURL,然后发现开发工具和浏览器都可以出图,但是真机弹出 data; 想问下这个怎么解决?求大神指教
2021-12-16 - 微信转发电脑完全实现,但是手机真机测试地址跳转不过去?
我先描述一下情况,我做了微信转发,样式什么的都是好的,不管在真机还是电脑上的开发者工具上测试都是好的,然后转发过去的小方块,电脑上点击,可以定位到具体的页面,但是真机就是过不去,只能在首页。下面上图上代码。 具体实现转发的代码我就不上了,之前我提过一个问题,那里有全部代码。额,怎么发不了图片,那我发文字把,有点不好看,将就点看。 // 挂载路由导航守卫 router.beforeEach((to, from, next) => { console.log(from) console.log(to) if (to.path === '/login') return next() const userId = window.sessionStorage.getItem('userId') console.log(userId) if (!userId) { return next('/login') } next() }) 这个是我挂着路由下,以确保每个进来的用户都先进行验证身份,没有注册的就会转去注册和微信授权,下面的代码就是login这个组件里的微信授权登录和微信转发调用,wxconfig是我单独写的一个js文件,做微信的转发的,这里只调用了一下 async getloginInfo() { const AppId = 'dafdsafdafdsafdafdsafdsa' // 公众号的AppId const code = this.getUrlParam('code') // 获取请求路径中带code字段参数的方法 const local = window.location.href // 获取当前的页面路径,这就是回调的地址 var state = Math.ceil(Math.random() * 10000) if (code == null || code === '') { window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' + AppId + '&redirect_uri=' + encodeURIComponent(local) + '&response_type=code&scope=snsapi_userinfo&state=' + state + '#wechat_redirect' } else { // 通过获取到的code,调用后台的接口,取得openId const res1 = await this.$http({ url: '/sp_trunk/login/wxCallback', method: 'get', params: { code: code } }) this.userInfo = res1.data.userInfo this.openId = this.userInfo.openid this.name = this.userInfo.nickname this.avatar = this.userInfo.headimgurl } // 后台获取code后应该传给我openId和信息,我将其保存到浏览器里。 window.sessionStorage.setItem('openId', this.openId) // 把地址中的code值去掉,并将后面的参数保留下来 if (window.location.href.indexOf('?code=') != -1) { var firstUrl = location.href.split('?code=')[0] this.endUrl = location.href.split('?code=')[1].split('#')[1] history.pushState('', '', firstUrl) // 参数可省略 } // 开始走登录的流程 const { data: res } = await this.$http({ url: '/sp_trunk/login/login', method: 'POST', params: { openId: this.openId } }) // 用户的账号如果不被冻结,就没有userStatus这个状态 if (res.userStatus == 1) { return this.$toast('您的账号已被冻结,请解冻后使用') } // 如果是新用户就转去注册页面 if (res.isNewUser) { this.$router.push({ name: 'Registered', params: { openId: this.openId, name: this.name, avatar: this.avatar } }) } else { // 如果已经注册,就直接进入页面 this.userId = res.userId // 把userId存到浏览器里 window.sessionStorage.setItem('userId', this.userId) // 获取自己的信息并存到浏览器里 const userInfo = await this.$http({ url: '/sp_trunk/user/getUserInfo', method: 'POST', params: { targetUserId: this.userId, userId: this.userId } }) window.sessionStorage.setItem('myselfAvatar', userInfo.data.avatar) window.sessionStorage.setItem('myselfName', userInfo.data.name) // 如果浏览器里面有链接地址就跳转到浏览器的地址 console.log(this.endUrl) if (this.endUrl != '/login') { this.$router.push(this.endUrl) } else { this.$router.push('/sp_trunk/qa/getDynamicQAs') } } }, 然后,神奇的事情就出现了,我去,这里不能放图我怎么展示呢?算了,我放上来试试,万一只有我不能看你们能看呢~ [图片] 这张图是我发布的转发内容,请忽略我乱写的文章和图片,反正样式是实现了的。 然后我在电脑的微信点击,确实是转到了我的目标页面,但是在手机上点击,就直接转到了首页,我想问一下这是咋回事呢?而且我复制了电脑页面和手机页面的网址,发现确实一个是目标页面(带参数),一个是首页的网址。
2021-04-01 - 微信授权在大部分手机上能通过,但是苹果不能?
为啥呢?
2021-03-26 - 在浏览器里可以打印出微信接口相关数据,但是开发者工具里显示wx undefined?
我按照官方的文档配置了微信转发,在浏览器里可以正确的打印出来相关配置,但是在开发者工具里测试的时候提示wx undefined,同时真机测试样式不变,我想知道我哪里有问题,先上代码,我是单独写了一个js文件,由于太长了,所以截了两张图 [图片][图片] 然后在main里引入wxconfig.js [图片] 然后进入浏览器显示是这样的。 [图片] 然后在开发者工具上是这样的 [图片] 然后在真机上发布的效果是这样的,我设置了图片和简介的,但是转发朋友圈和转发好友都没有, [图片][图片] ····························································································································· 以下内容为新增 浏览器里测试转发首页是这样 [图片] 其他页面转发是这样 [图片] 开发者文档依旧报错 [图片] 大神们,求指点啊,目前就是浏览器测试如上,也不算成功,但是又能看到图片了,开发者工具报错,真机测试什么都没变化,也就是既看不到图片,样式还是默认样式。 ·········································································································································································· 我是来写答案的 这个问题困扰了我足足2天,最后终于解决,特地来做一个记录,万一有人跟我遇到一样的问题可以解决。 首先很坑的地方是,浏览器认我引入的微信,但是开发文档不认,所以在这里要做一个三元表达式的判断,二话不说上图 [图片] 当然这里你也可以是wx = wx ? wx : window.wx,这里因为我把下面的都改成了window.wx,所以我就这么判断了,懒得改回来。 然后后面的接口,我开始按照说明直接使用的最新接口,没有使用快要废弃的接口,然后,就是一直报错,不是说我签名错误,就是没有在安全列表,但是我来来回回的检查了,都不是这两点,然后,这里要做一个判断就好了,如果认识新接口,那就用新接口,如果认识旧接口就用旧接口。 [图片]
2021-03-20