Github地址
基於Taro v3開發,支持多端小程序動態加載遠程 JavaScript 腳本並執行,支持 ES5 語法
最近更新內容 新增useScriptContext獲取當前執行上下文 參數名稱調整:useCache -> cache 緩存策略調整 新增text屬性,可直接傳入js字符串 src支持數組,解決多層TaroScript嵌套問題Usagenpm 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="url1" /><TaroScript src="url2" /><TaroScript src="url3" />
如需要確保執行順序,應該使用數組或嵌套,例如:
數組方式(建議)
<TaroScript src={["url1", "url2", "url3"]} />
或 嵌套方式
<TaroScript src="url1"> <TaroScript src="url2"> <TaroScript src="url3"></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>;