普拉斯强

普拉斯强 查看完整档案

上海编辑  |  填写毕业院校鞋厂  |  CODER 编辑 github.com/yaofly2012/note/issues 编辑
编辑

前端er

个人动态

普拉斯强 回答了问题 · 今天 20:47

V8执行JavaScript代码的疑惑

一个执行上下文主要包含三块信息:

  1. this变量;
  2. 函数内部局部变量(包含形参和argument变量);
  3. 作用域对象列表。

在代码被解释器执行前是无法确认this变量的,怎么能创建执行上下文呢。

关注 2 回答 1

普拉斯强 关注了问题 · 12月2日

http 接口心跳要保活?

大佬你好!

我最近在对接一个第三方 HTTP 接口,流程是:登录 -> 登录成功发送心跳包 -> 其他 API 操作 -> 登出。

其中心跳包在登陆成功后就需要定时去发送。如果30s服务器接收不到心跳包,会话将终止。

这样做是为了保证接口的安全性吗?因如果是 TCP 长连接通信我能理解心跳包的作用,但是 HTTP 接口为何要加心跳包保活呢?

我理解是:TCP 长连接保活是为了保活网络连接,而 HTTP 这个保活是为了保活用户的会话(session)或登录后返回的 token 的有效期。

请问这样理解是否还有不到位的地方?请大佬们开怀畅聊。

关注 5 回答 3

普拉斯强 回答了问题 · 12月2日

解决js按钮双击怎么不让它执行两次单击事件

别截图,直接贴代码。

思路:延时300ms执行click处理函数,如果是双击则取消执行click处理函数。

var s;
var delayClickTimerId;
var b = document.getElementById('bb');
b.onclick = () => {
    if(delayClickTimerId) {
        return;
    }
    delayClickTimerId = setTimeout(() => {
        delayClickTimerId = null;
        clearInterval(s);
        s = setInterval(() => {
            window.scrollBy(0, 20)
        }, 20)
        console.log('6666');
    }, 300);
    
}

b.ondbclick = () => {
    // 如果是double click,则取消click处理
    if(delayClickTimerId) {
        clearTimeout(delayClickTimerId);
        delayClickTimerId = null;
    }
    clearInterval(s);
}

关注 4 回答 2

普拉斯强 回答了问题 · 12月2日

循环添加this.$set值都等于循环的最后一个值,是怎么回事

好吧,终于有点明白你的意图了:“循环的给input初始值”

(_this.infoVisaValue[_this.template[j].question_id] || '')
.split('<|>') // 获取`_this.template[j].question_id`初始值列表
.forEach((initialVal, index) { // 遍历初始值给对应位置的`_this.template[j].select_question`元素赋值
    _this.$set(_this.template[j].select_question[index], 'value', initialVal);
})

关注 3 回答 2

普拉斯强 回答了问题 · 12月2日

前端给后端传输json数据格式问题

  1. 检查下前端的请求报文头content-type的取值,上送JSON数据时content-type:application/json
  2. 检查下前端的请求体是不是一个JSON对象(F12看下,浏览器会自动转成JSON对象展示的)。

image.png

如果上述都没有问题,那就找后端同事看看接口为啥没有自动解析

关注 8 回答 9

普拉斯强 回答了问题 · 12月1日

当项目使用多个npm包,如何解决babel代码重复问题?

项目依赖abc 三个npm包不单独引入polyfill,由项目本身引入polyfill。
还有不用把整个polyfill都引入吧,实际需要什么就手动引入什么。

关注 4 回答 3

普拉斯强 回答了问题 · 12月1日

css 两个同样大小的圆 无法完全覆盖

估计两次画圆抗锯齿不能完全重合导致的

关注 6 回答 2

普拉斯强 回答了问题 · 12月1日

使用JSON.parse转换字符串对象的困惑

Number.isSafeInteger(1259744819760442395) // false

真要这么大的话只能使用字符串

关注 8 回答 8

普拉斯强 关注了问题 · 12月1日

当项目使用多个npm包,如何解决babel代码重复问题?

比如项目依赖abc 三个npm包(都是自己写的)
这3个包都是用的es6+编写的
每个包通过各自babel编译后生成dist/index文件作为包的入口,例如:

 "main": "dist/index.js",

那么每个index.js其实都包含了babel的添加的兼容代码(core3大概60k)

导致现在我的项目因这3个包多了60*3K代码,其中有60*2k代码是多余的

大神们,请问如何避免多增加120k代码???

关注 4 回答 3

普拉斯强 关注了问题 · 12月1日

vue项目中postMessage + ifram 跨域,接收不到消息

场景:
项目中使用了ifram + postmessage进行跨域的 , 我在a页面发送postmessage事件 , 在main.js中使用window.addeventListen进行事件监听

下面就是我的两个地址:


# 视屏跨域的地址
VUE_APP_DOMAIN_URL = 'https://fin.fayuan.com/fodr/fodrmediator'

#原地址
VUE_APP_CUR_URL = 'http://tiaojie.court.gov.cn/fodr/fodrmediator'

a页面中:

//html
 <iframe style="width:100%" id="child" ref="iframBox" :data-original="domainSrc" v-show="true"></iframe>

//data定义需要跨域的地址
 domainSrc: `${process.env.VUE_APP_DOMAIN_URL}`,// 跨域的地址


//点击事件
call(){
      // 执行跨域登陆传参
      document.getElementById('child')
        .contentWindow.postMessage({
          handleType: 'loginIfram',
          partyids: this.checkList.join(","),
          id: this.id,
          loginInfo: {
            pwd: this.userDate.userPwd,
            tel: this.userDate.telephone
          }
        },
          this.domainSrc
        )
}

main.js中监听message事件 ,

const origin = process.env.VUE_APP_CUR_URL //原域名
const mainUrl = process.env.VUE_APP_DOMAIN_URL // 跨域地址
window.addEventListener('message', function (e) {
    let eOrigin = e.origin + '/fodr/fodrmediator'
    const openUrl = `${mainUrl}/#/viewRoom?partyids=${e.data.partyids}&id=${e.data.id}`

    console.log('验证信息是否跨域=>>', e.data.handleType == 'loginIfram', eOrigin == origin);

    if (e.data.handleType == 'loginIfram' && eOrigin == origin) { //这样来验证确保安全
        // const newWindow = window.open('_blank'); //提前申明这样防止直接打开网页谷歌拦截问题
        const newWindow = window.open(); //提前申明这样防止直接打开网页谷歌拦截问题
        console.log('data===>', e.data);
        // 重新登录一遍
        login({
            password: e.data.loginInfo.pwd,
            username: e.data.loginInfo.tel
        }).then(res => {
            if (res.code == 1) {
                console.log('当前登陆成功');
                newWindow.location.href = openUrl;
            }
        })
    }
})

现在就是npm run build之后 , 页面进入会打印一次mainjs的日志, 当我点击开始发消息的时候就没有日志打印了 , 好像没有接受到消息还是main,js只会执行一次

江湖救急 急急急 求大牛帮看下

关注 3 回答 1

认证与成就

  • 获得 165 次点赞
  • 获得 8 枚徽章 获得 1 枚金徽章, 获得 1 枚银徽章, 获得 6 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

注册于 2016-11-02
个人主页被 3k 人浏览