taro-script 0.4 發布,基於 Taro v3 的 JavaScript 解釋器組件

2021-01-10 開源中國
taro-script

Github地址

基於Taro v3開發,支持多端小程序動態加載遠程 JavaScript 腳本並執行,支持 ES5 語法

最近更新內容 新增useScriptContext獲取當前執行上下文 參數名稱調整:useCache -> cache 緩存策略調整 新增text屬性,可直接傳入js字符串 src支持數組,解決多層TaroScript嵌套問題Usage

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="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>;

相關焦點

  • taro-script 0.4 發布,基於 Taro v3 的 JavaScript 解釋器組件...
    taro-scriptGithub地址基於Taro v3開發,支持多端小程序動態加載遠程
  • Taro 3.1 beta 發布:開放式架構新增 4 端支持
    而基於開放式架構,開發者能夠通過繼承某個端平臺插件,迅速開發出自定義端平臺插件,完成對這些新組件或 API 的支持,無需等待 Taro 發布版本。二、重要問題修復v3.1 除了包括開放式架構的調整外,也不忘鞏固核心。以下是 v3.1 對重要問題的修復情況,有一些在 v3.0 的 patch 版本已經推出,一些則是 v3.1 中才推出,均予以列出:1.
  • Taro 3.0.22 發布,BAT 小程序、H5 與 RN 端統一框架
    Taro 3.0.22 發布了。
  • Taro 3 支持 React Native - OSCHINA - 中文開源技術交流社區
    Taro 3 發布後暫不支持 React-Native 平臺,於是我們向社區提交了一份實現草案,希望把 58 在 React-Native 上的技術積累分享到社區,同時也從社區對 Taro 的共建上獲益。
  • Taro 1.3 震撼升級:全面支持 JSX 語法和 HOOKS
    Taro 1.3 是我們醞釀最久的版本:經歷了橫跨 6 個月的開發時間,近 2000 次的代碼提交,近百位開發者的共同參與。我們終於在今天驕傲地發布了 Taro 1.3。Taro 1.3 還實現了 React 16 的  createContext 、 contextType  和  useContext  API。新 Context 通過聲明式的 API 來傳遞組件的更新,使得Taro 跨組件通信和共享狀態更為直觀。
  • Taro 周報 #5: 收穫「威馬智行」案例,文檔調整示例代碼的文件路徑看起來更清晰
    Taro 周報 2020 年 11 月 21 日 - 2020 年 11 月 28 日收穫的案例—威馬智行[1] 來自 wangxiaocuo[2] 提交妙繪藝術[3] 來自 pcdotfan [4]OPEN ISSUES🙋‍ #8145 taro3.0.17 頁面中有兩個swiper時, 進入其他頁面再返回, swiper報錯[6], by darkfiredarkhalo[7]🙋‍ #8144 Input 組件onInput時,return 一個字符串,input框的值未發生變化
  • Vue基礎及常用UI組件庫簡介
    https://cdn.bootcss.com/jquery/3.3.0/jquery.min.js"></script><script type="text/javascript"> new Vue({ el:'#app', data:{ data: [{ id:1,
  • 第一篇:JavaScript基本語法
    <script>標籤的type屬性表示腳本語言是javascript。<script>標籤可放置在HTML 頁面的<body>或者<head>標籤內。,JS解釋器一邊讀取代碼一邊解釋並執行代碼。
  • kpc v1.3.0 發布,新增繪圖組件 Diagram
    KPC組件庫1.3.0版本,新增了一個繪圖組件Diagram,該組件基於強大的mxGraph開發,可以繪製流程圖,拓撲圖等
  • Vue知識點總結(2)——v-for、v-if、v-show(超級詳細)
    /javascript"> var app = new Vue({ el:'#app', data:{ items:[59,82,96,41,55,2,4,91,25], }, });</script>這就是v-for最基本的用法。
  • Vux v0.1.2 發布,基於 Vue 和 WeUI 的 UI 組件庫
    Hi, Vux 0.1.2發布了。
  • KaTeX v0.8.3 發布,「最快」的數學公式渲染庫
    特點:1、簡單的API:不依賴其它 javascript庫;2、快速:KaTeX 是將其數學同步且不需要回流頁;3、輸出質量:KaTeX 的布局是基於 Donald Knuth 的 Tex ,數學排版的黃金標準;4、伺服器的渲染:無論瀏覽器或環境如何,KaTeX
  • Vue2.0父子組件間通信
    vue2.0Vue.js是一套構建用戶界面的漸進式框架。與其他重量級框架不同的是,Vue 從根本上採用最小成本、漸進增量的設計。Vue 的核心庫只專注於視圖層,並且很容易與其他第三方庫或現有項目集成。另一方面,當與單文件組件和 Vue 生態系統支持的庫結合使用時,Vue 也完全能夠為複雜的單頁應用程式提供有力驅動。
  • vue之自定義組件的 v-model 的詳解及實踐
    Vue的自定義組件的 v-model的這塊將的不是很清楚,今天我們就一起來捋一下看看自定義組件中的v-model是什麼。那麼自定義組件的 v-model可以通過自定義 prop/event來完成我們需要的結果,直接上代碼:父組件<!
  • 幾個非常有意思的javascript知識點總結
    移除script標籤後事件仍然能執行的原因這個問題主要是之前有朋友問過我,當時的想法就是簡單的認為script內的代碼執行完之後以及與dom綁定了,存放在了瀏覽器內存中,最近查了很多資料發現有一個有點意思的解釋,放出來大家可以感受一下:JavaScript解釋器在執行腳本時,是按塊來執行的,也就是說瀏覽器在解析
  • Web Component組件化
    1.定義一個ElDialog類繼承了HTML元素的特性2.constructor()調用這個類3.super()建立正確的原型鏈.4.你可以在這裡使用javascript語法Web文檔上自定義元素的控制者是CustomElementRegistry對象-該對象允許您在頁面上註冊自定義元素,返回有關已註冊哪些自定義元素的信息
  • eval5 1.2.0 發布:JavaScript 解釋器
    eval5是完全基於JavaScript編寫的JavaScript解釋器,支持ECMA5語法。
  • ECharts GL 1.0 alpha 發布
    儘管這兩年時間 ECharts X 沒什麼動靜,但是其它的工作,像 ECharts 3 的架構大改動和後續版本的迭代升級,以及其它 WebGL 產品的開發,都是對新版本架構和技術上的積累。現在我們終於可以說我們準備得差不多了,ECharts-X 的下一代,ECharts-GL 發布 1.0 alpha。
  • RegularJS v0.3.0 發布,JavaScript MVC 框架
    RegularJS v0.3.0 發布,此版本是 v0.0.1 版本以來最大的更新版本,引入了一些新特性: