关于 Nanote 的思考结构模型思想斗争共进行了四个版本,它们的图示如下版本 1插件与 Electron 直接通信,导致 ipc 接口泄露版本 2接入 qiankun 沙盒模型,但插件可以控制 props,伪造 appName版本 3 <current>nanote-api 做中间代理掌握 props,但插件仍可以通过篡改源码的方式伪造 appName,甚至直接无视 nanote-api版本 4 不再考虑,将跳过此版本nanote-api 在插件开发时可引入,打包时必须去除,运行时动态引入⭐ 版本 5 <future>考虑直接使用 iframe 而不是 qiankun,因为它原生的 JS、CSS 隔离机制是最好的,之前使用 qiankun 是因为安全问题,现在可以模仿类似机制,通过 fetch 方法获取它的资源引用,最后把 nanote-api 注入,创建虚拟环境并执行既创建了良好的隔离环境,又避免了接口被篡改,同时取到了 qiankun 和 iframe 的优点简要描述:首先通过 import-html-entry 获取页面的 html 模板、样式表、脚本,

问题简述qiankun 是一个微前端框架,可以有效地隔离主应用及各个子应用之间的运行环境,使得 window 对象不会被污染,但它并不是一个绝对安全的沙箱环境,子应用可以通过一些 “特殊技巧” 绕过沙箱。所以,如果大家遵守一定的约束和规范,qiankun 可以很好发挥作用,否则就会出现很多问题。手动加载 scriptqiankun 会通过 import-html-entry 组件,预先获取 html 文本流,然后分别收集样式表(link 标签和 style 标签)和脚本(script 标签),然后在 proxyWindow 中执行 js 脚本,但是手动加载的脚本不会被收集到:// app entry let script = document.createElement('script'); script.innerText = `window.nanote = 'running';` document.body.append(script); // main console.log(window.nanote) // running也可以将上述代码中的 script.innerTe

问题简述学习《Vue.js 设计与实现——霍春阳》这本书时,了解到 Vue3 响应式机制的实现使用到了 WeakMap 类型,Map 和 WeakMap 的不同之一是:后者是对原始对象的弱引用,如果原始对象因为没有被其他地方引用,而被垃圾回收了,WeakMap 中自然也就不存在这一属性,做了一点小实验,特此来记录一下。实验代码因为 v8 引擎的垃圾回收是自动的,且在占用内存较大时才会开始回收垃圾,所以下面的代码运行到最后并不会看到期待的效果,因此要通过 --expose-gc 参数允许开启垃圾回收新建 weakmap.js,并在第一行打断点const map = new Map(); const weakmap = new WeakMap(); let foo = { name: 'foo' } let bar = { name: 'bar' } map.set(foo, 'this is foo'); weakmap.set(bar, 'this is bar'); foo = null; bar = null; global.gc(); console.log('weak

问题简述Vue 不建议使用 index 作为 key,因为会导致一些性能问题,甚至可能产生 bug<!-- 不建议用 index 作为 key --> <div> <p v-for="(item,index) of list" :key="index">{{item}}</p> </div> <!-- list: ["张三", "李四", "王五"] -->看了若干篇文章,讲的都不是通俗易懂的,自己来总结一下key 的作用上面的代码片段在开发中是屡见不鲜的,使用 v-for 来渲染一些同类型的结点,Vue3 文档 里描述了 key 的用途,就是尽可能地复用结点,减少 DOM 操作,提高效率和性能来看下面的一段伪代码(不能运行),在输入框里输入一些值,点击添加按钮就会在列表顶部添加一条记录 <div class="list"> <p v-for="item i

问题简述浏览器提供了若干错误处理方法,能够全局处理未捕获的异常,列举如下// 能对语法异常和运行时异常(异步也能捕获)进行处理,但是对语法错误和网络错误无能为力 window.onerror = () => { } // 可以搞定网络资源加载错误(第三个参数必须是 true) window.addEventListener('error', () => { }) // 捕获没有 catch 的 rejection,前面二者无法处理 window.addEventListener('unhandledrejection', () => { })如果随便找一个网站,打开它的控制台会发现好多报错,这时如果手动给它加上错误处理,会发现自己的回调函数是一个也没有被调用,这是为什么呢?解答尽管控制台红红的一片全是错误,甚至有的因为使用了诸如 AdBlock, Ublock Origin 等类似的拦截插件,会出现成百上千的错误,但都是已经捕捉了的错误,因为使用了 console.error() 而看起来是大量未捕捉的错误如果在添加了错误事件监听器后,手动 throw ne

关于 Nanote 的思考结构模型思想斗争共进行了四个版本,它们的图示如下版本 1插件与 Electron 直接通信,导致 ipc 接口泄露版本 2接入 qiankun 沙盒模型,但插件可以控制 props,伪造 appName版本 3 <current>nanote-api 做中间代理掌握 props,但插件仍可以通过篡改源码的方式伪造 appName,甚至直接无视 nanote-api版本 4 不再考虑,将跳过此版本nanote-api 在插件开发时可引入,打包时必须去除,运行时动态引入⭐ 版本 5 <future>考虑直接使用 iframe 而不是 qiankun,因为它原生的 JS、CSS 隔离机制是最好的,之前使用 qiankun 是因为安全问题,现在可以模仿类似机制,通过 fetch 方法获取它的资源引用,最后把 nanote-api 注入,创建虚拟环境并执行既创建了良好的隔离环境,又避免了接口被篡改,同时取到了 qiankun 和 iframe 的优点简要描述:首先通过 import-html-entry 获取页面的 html 模板、样式表、脚本,