nobo:
we-script
让微信小程序支持加载远程 JavaScript 脚本并执行组件,支持 ES5 语法
Github 地址:https://github.com/bplok20010/we-script
使用
小程序如何使用 npm 包,官方文档: https://developers.weixin.qq.com/miniprogram/dev/devtools/npm.html
npm install --save we-script
step1 安装完成后,点击开发者工具中的菜单栏:工具 --> 构建 npm
step2 安装完成后,点击开发者工具中的菜单栏:工具 --> 项目详情 --> 本地设置 --> [勾选] 使用 npm 模块
在需要用的页面或组件的json
文件添加声明,示例:
index.json
{
"usingComponents": {
"we-script": "we-script"
}
}
index.wxml
<we-script src="url">
<view>hello we-script<view>
</we-script>
注:多个we-script
会并行加载及无序执行,无法保证执行顺序。如:
// 并行加载及无序执行
<we-script src="url1" />
<we-script src="url2" />
<we-script src="url3" />
如需要确保执行顺序,应该使用数组,例如:
数组方式
<we-script src="{{[url1,url2,url3]}}">
<view>hello we-script<view>
</we-script>
we-script
也支持嵌套,如:
<we-script src="url1">
<we-script src="url2">
<view>hello we-script<view>
</we-script>
</we-script>
注意: 在嵌套的情况下we-script
加载和执行也是并行且无序的,因为小程序生命周期触发机制(BUG?)导致,如果想在嵌套模式下保证顺序,需要自己手动控制,示例:
<we-script bind:onLoad="loadScript" src="url1">
<we-script wx:if="url1_load_success" src="url2">
<view>hello we-script<view>
</we-script>
</we-script>
重要: 远程加载执行的代码所生成的函数,变量等数据存储在we-script
默认的上下文
中,可通过onLoad
事件获取默认上下文
,或通过onInit
事件自定义上下文
。
示例:
we-script-demo
we-script 属性
-
src
类型:
string | string[]
要加载的远程脚本
-
text
类型:
string | string[]
需要执行的 JavaScript 脚本字符串,
text
优先级高于src
(互斥) -
timeout
类型:
number
默认值:60000
毫秒设置每个远程脚本加载超时时间
-
cache
类型:
boolean
默认值:
true
是否启用加载缓存,缓存策略是以当前请求地址作为
key
,缓存周期为当前用户在使用期间的生命周期。 -
once
类型:
boolean
默认值:
true
相同上下文及相同地址的脚本只执行一次。
we-script 事件
-
onInit
类型:
(e) => void
interface OnInitDetail { getContext: () => {}; setContext: (context: {}) => void; }
初始事件,监听该事件可获取当前执行上下文或自定义执行上下文。
示例:
// index.js { onInit(e){ // 自定义执行上下文 e.detail.setContext({ value: 100 }) } } // index.wxml <we-script src="url" bind:onInit="onInit" />
-
onLoad
类型:
(e) => void
interface onLoadDetail { context: {}; }
加载并执行成功后触发
-
onError
类型:
(e) => void
interface onErrorDetail { error: any; }
加载失败或执行错误后触发
其他
-
该组件使用eval5来解析
JavaScript
语法,支持ES5
-
上生产环境前别忘记给需要加载的地址配置合法域名
-
we-script
内置类型及方法:
NaN;
Infinity;
undefined;
null;
Object;
Array;
String;
Boolean;
Number;
Date;
RegExp;
Error;
URIError;
TypeError;
RangeError;
SyntaxError;
ReferenceError;
Math;
parseInt;
parseFloat;
isNaN;
isFinite;
decodeURI;
decodeURIComponent;
encodeURI;
encodeURIComponent;
escape;
unescape;
eval;
Function;
console;
setTimeout;
clearTimeout;
setInterval;
clearInterval;
wx;
taro-script 0.4 发布,基于 Taro v3 的 js 解释器组件内置类型和当前运行 JavaScript 环境相关,如环境本身不支持则不支持!
nobo: taro-script Github 地址 基于Taro v3开发,支持多端小程序动态加载远程 JavaScript 脚本并执行,支持 ES5 语法 最近更新内容 新增useScriptContext获取当前执行上下文 参数名称调整:useCache -> cache 缓存策略调整 新增text属性,可直接传入 js 字符串 src支持数组…
问题 node.jsXbathy:我在 a.html 页面有一个循环播放的动画,如何通过访问另一个路由,比如说 /error,使 a.html 停止播放? 换句话说如何通过路由向 view 传参?应该是这么个意思. 不用框架比如说 vue 、angular 啥的
Python 爬虫 js 分析MrhuangSTR:一般遇到 js 加密参数的,能通过全局搜索定位到对应的 js 文件,然后就没有然后了,试过网上搜索通过打断点调试分析加密逻辑,但是对于那些 js 反混淆比较厉害的就束手无策,网上搜对应的博客看的也是云里雾里,请问当你遇到这种不知道该如何下手的时候你们是怎么处理的?如何提高自己的 js 分析能力
这个网站是 Node.js 搭建的吗?yunyingsilue:小弟不懂,想问问大家www.ruanfa.cn这个网站是 Node.js 搭建的吗?能不能看出来Node.js 搭建的网站有哪些优缺点?putaozhenhaochi:这就是你想出来的推广方式? imherer:是的,用的 next.js SingeeKing:不说是不是推广,看软件介绍里面的图我有点想 @1ychee jimmy2…
不懂就问: node.js 做静态资源服务器如何?cat:有个轻业务,访问量不大,后端已经用 koa 写了,现在需要提供图片及其它文件给前端,请问可以直接在 koa 中返回文件的 stream 吗?如果文件比较大( 100M 以内)是否还合适?以前都是由 nginx 提供,现在为了省一个流程,想用 koa 直接做 http serverDanswerme:一般不都是 nginx 做静态资源服务器,然后其他请…