在微信小程序中使用 javascript eval

2022-03-14 11:55:35 +08:00
 taowen

因为众所周知的原因,微信小程序禁用了 javascript eval

https://github.com/taowen/define-function 把 quick.js 编译为 WebAssembly (尺寸小于 200kb ),从而动态解释执行代码

在微信小程序中使用步骤如下 https://juejin.cn/post/7074510173661823012

1717 次点击
所在节点    微信
8 条回复
3dwelcome
2022-03-14 13:58:26 +08:00
单纯不能操作 DOM 的 JS 完全没什么用啊。

楼主可以学一下官方,把 quickjs 的 DOM 接口和小程序的 View 自定义组件对接一下,这样就可以动态执行 JS ,并生成动态 HTML 了。

不能拼接 HTML 的 JS ,不是好 JS 。
taowen
2022-03-14 14:14:31 +08:00
@3dwelcome 现在的 taro 和 kbone 的用户,自己对接一下应该不难。包括 view 部分的话,就很难移植现有的代码了。保持库本身的精简,也方便用来做 plugin 的基础设施,例如像 figma 这样 https://www.figma.com/blog/an-update-on-plugin-security/
3dwelcome
2022-03-14 14:28:57 +08:00
@taowen 我们用 JS 操作的都是业务代码,都是需要操作 DOM 属性的。

纯 JS 的计算,小程序本身就支持,也不需要用额外插件。

辛辛苦苦写出的库,总要让别人用起来吧。
taowen
2022-03-14 14:39:44 +08:00
taro 和 kbone 已经是很好的动态拼接 HTML 更新 View 的解决方案了。这两个都是 wxml 的动态化的方案。从原理上也没法做到更好,想要完整不缩水的 DOM 那平台不支持也没办法。
3dwelcome
2022-03-14 15:15:26 +08:00
@taowen 你没理解我的意思。

你既然有能力能从底层重构 javascript ,自己控制运行期,那你自己就是一个完整的 runtime 平台。

可以类似 nodejs ,注入嵌入一些 document 元素,比如 getelementbyid ,比如支持一下 jquery 语法。

kbone 这种都是 VUE 组件和小程序组件之类的转换,没办法脱离 MVVM 写代码。你这个 WASM 的潜力,要比这几个框架大太多了。可以直接把 UI 和 javascript 函数对接。
taowen
2022-03-14 15:25:35 +08:00
kbone 有相对完整的 DOM 模拟,支持 getElementById 这些。微信小程序的展示层只支持 wxml ,你有 wasm 也没有用。最终东西要往页面上渲染,就只能和 taro kbone 一样,难不成你要用 canvas api 直接 draw 么? wxml 动态化都长这个样子 https://github.com/taowen/vue-fusion/blob/main/packages/vue-fusion-weapp/pages/Fragment.wxml
3dwelcome
2022-03-14 15:40:06 +08:00


我指的是这种,可能和你的 fusion 库概念类似吧。

既然能支持 custom dom ,那就把 custom 元素能力最大化。小程序架构太像 VUE 了,以至于传统的 JS 字符串拼接代码,更新界面完全没发挥余地。
taowen
2022-03-14 15:44:38 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/840186

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX