For Taro v3:支持多端小程序动态加载远程 JavaScript 脚本并执行,支持 ES5 语法
npm install --save taro-script
import TaroScript from "taro-script"; <TaroScript text="console.log(100+200)" />;
import TaroScript from "taro-script"; <TaroScript src="https://xxxxx/xx.js"> <View>Hello TaroScript</View> </TaroScript>;
注 1:同一taro-script
只会执行一次,也就是在componentDidMount
后执行,后续改变属性是无效的。示例
function App({ url }) { // 只会在第一次创建后加载并执行,后续组件的更新会忽略所有属性变动 return <TaroScript src={url} />; }
注 2:多个taro-script
会并行加载及无序执行,无法保证顺序。如:
// 并行加载及无序执行 <TaroScript src="path1" /> <TaroScript src="path2" /> <TaroScript src="path3" />
如需要确保执行顺序,应该使用数组或嵌套,例如:
数组方式(建议)
<TaroScript src={["path1", "path2", "path3"]} />
或 嵌套方式
<TaroScript src="path1"> <TaroScript src="path2"> <TaroScript src="path3"></TaroScript> </TaroScript> </TaroScript>
globalContext
内置的全局执行上下文
import TaroScript, { globalContext } from "taro-script"; <TaroScript text="var value = 100" />;
此时 globalContext.value
的值为 100
自定义context
示例
import TaroScript from "taro-script"; const app = getApp(); <TaroScript context={app} text="var value = 100" />;
此时 app.value
的值为 100
TaroScript
属性src
类型:string | string[]
要加载的远程脚本
text
类型:string | string[]
需要执行的 JavaScript 脚本字符串,text
优先级高于 src
context
类型:object
默认值:globalContext = {}
执行上下文,默认为globalContext
timeout
类型:number
默认值:10000
毫秒
设置每个远程脚本加载超时时间
onExecSuccess
类型:()=> void
脚本执行成功后回调
onExecError
类型:(err:Error)=> void
脚本执行错误后回调
onLoad
类型:() => void
脚本加载完且执行成功后回调,text
存在时无效
onError
类型:(err: Error) => void
脚本加载失败或脚本执行错误后回调,text
存在时无效
fallback
类型:React.ReactNode
脚本加载中、加载失败、执行失败的显示内容
cache
类型:boolean
默认值:true
是否启用加载缓存,缓存策略是已当前请求地址作为key
,缓存周期为当前用户在使用应用程序的生命周期。
children
类型:React.ReactNode | ((context: T) => React.ReactNode)
加载完成后显示的内容,支持传入函数
第一个参数为脚本执行的作用域
useScriptContext()
获取当前执行上下文 hook
import TaroScript, { useScriptContext } from "taro-script"; <TaroScript text="var a= 100"> <Test /> </TaroScript>; function Test() { const ctx = useScriptContext(); return ctx.a; // 100 }
evalScript(code: string, context?: {})
动态执行给定的字符串脚本,并返回最后一个表达式的值
import { evalScript } from "taro-script"; const value = evalScript("100+200"); // 300
该组件使用eval5来解析JavaScript
语法,支持 ES5
上生产环境前别忘记给需要加载的地址配置合法域名
TaroScript 内置类型及方法:
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,
内置类型和当前运行 JavaScript 环境相关,如环境本身不支持则不支持!
导入自定义方法或类型示例:
import TaroScript, { globalContext } from "taro-script"; globalContext.hello = function(){ console.log('hello taro-script') } <TaroScript text="hello()"></TaroScript>;
或自定义上下文
import TaroScript from "taro-script"; const ctx = { hello(){ console.log('hello taro-script') } } <TaroScript context={ctx} text="hello()"></TaroScript>;
interface TaroScriptProps<T = Record<any, any>> { /** 脚本执行根作用域及上下文环境 */ context?: T; /** 脚本路径 */ src?: string | string[]; /** JavaScript字符串代码 */ text?: string; /** 脚本加载并执行完后回调 */ onLoad?: () => void; /** 脚本加载失败后回调 */ onError?: (err: Error) => void; onExecSuccess?: () => void; onExecError?: (err: Error) => void; /** 加载脚本超时时间 */ timeout?: number; /** 脚本加载中显示内容 */ fallback?: React.ReactNode; /** 启用缓存 */ cache?: boolean; children?: React.ReactNode | ((context: T) => React.ReactNode); } declare function evalScript<T extends Record<any, any>>(code: string, context?: T): any; declare const globalContext: {}; declare function useScriptContext<T = Record<any, any>>(): T;
import { ComponentType } from 'react' import Taro, { Component, Config } from '@tarojs/taro' import { View, Button, Text } from '@tarojs/components' import { observer, inject } from '@tarojs/mobx' im
taro-script Github地址 基于Taro v3开发,支持多端小程序动态加载远程 JavaScript 脚本并执行,支持 ES5 语法 最近更新内容 新增useScriptContext获取当前执行上下文 参数名称调整:useCache -> cache 缓存策略调整 新增text属性,可直接传入js字符串 src支持数组,解决多层TaroScript嵌套问题 Usage npm i
最近打开这个项目,yarn dev:weapp 时候报错,cli 和项目版本冲突如下: kyle@DESKTOP-LIPAM5T MINGW64 /d/yuwei-workspacke/web-frontend/icommunity/weapp-fontend/trunk/icommunity-weapp (master) $ yarn dev:weapp yarn run v1.22.4 $ n
前言 最近有个小程序项目需要用taro-vue+ts来开发,用的是vue2,正好总结一下。 项目入口 微信开发者工具里的编译旁边可以选择入口,要能出现在那需要配置project.config.json和project.priviate.config.json字段: "miniprogram": { "list": [ { "name": "pages
taro的安装及使用 安装 Taro 开发工具 @tarojs/cli 使用 npm 或者 yarn 全局安装,或者直接使用npx $ npm install -g @tarojs/cli $ yarn global add @tarojs/cli 使用命令创建模板项目 $ taro init myApp 进入项目目录开始开发,可以选择小程序预览模式,或者 h5 预览模式,若使用微信小程序预览模式
如何在Vue.js应用程序中动态加载JavaScript脚本? 以下是一个简单的解决方案: 但是第一行不加载脚本(它不向HTML添加元素)。 第二行是有效的。第二行是相同的,只是将app变量替换为纯文本(
我有自己的网站,当我按下一个按钮,我想加载一个不属于我的网站(即Google.com)。当这个页面加载时,我想要执行一个脚本。 例如,单击my site上的按钮,加载Google.com并用从我的网站传递的脚本文件中的值预加载搜索栏。 如果我访问Google.com时打开developer console并输入命令,我就可以做到这一点,但是,我想自动化这一点,所以我的脚本将操作这个新页面的DOM元
问题内容: 我正在一个网页上进行AJAX调用,该调用返回如下HTML块: 我正在将整个内容插入DOM,但是没有运行JavaScript。有办法运行吗? 一些细节:我无法控制脚本块中的内容(因此无法将其更改为可以调用的函数),我只需要执行整个块即可。我无法在响应中调用eval,因为JavaScript处于HTML的较大块内。我可以做某种正则表达式来分离JavaScript,然后在其上调用eval,但
本文向大家介绍vue如何实现动态加载脚本,包括了vue如何实现动态加载脚本的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了vue如何实现动态加载脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天在研究,tinymce富文本编辑器怎样在vue中使用,然后看到其它框架上的使用方法,它是动态加载tinymce脚本的,若果在本地引入静态
问题内容: 在HTML页面中包含JavaScript的方法有很多。我知道以下选项: 内联代码或从外部URI加载 包括在或标记[ [1],[2] ] 没有属性或属性(仅外部脚本) 包含在静态源中或由其他脚本动态添加(处于不同的解析状态,具有不同的方法) 不计算硬盘中的浏览器脚本,javascript:URI和-attributes [[3] ],已经有16种方法可以使JS执行,我敢肯定我忘了一些东西
本文向大家介绍Angular-Ui-Router+ocLazyLoad动态加载脚本示例,包括了Angular-Ui-Router+ocLazyLoad动态加载脚本示例的使用技巧和注意事项,需要的朋友参考一下 在使用angular过程以前同事是采取一次性加载方式,在index页面一次性加载所有的js跟css,这种加载方式只适合教学和小型项目中,中大型不建议使用,加载速度影响到用户体验。 在使用了Ui