摘要:方法回調(diào)函數(shù),該回調(diào)函數(shù)會在命令準備好執(zhí)行時返回,在命令未完整時返回。方法回調(diào)函數(shù),事件被觸發(fā)時將會被調(diào)用。超時如果在實例化時選擇了,當正在運行的程序在限定時間內(nèi)未調(diào)用指定的回調(diào)函數(shù)見實例化,那么將會觸發(fā)此事件。
一個兼容多種語言的瀏覽器 REPL 沙盒。
當前支持的語言Javascript 系列
Javascript
CoffeeScript
Kaffeine
Move
Traceur (JavaScript.next)
Esoteric
Bloop
Brainfuck
LOLCODE
Unlambda
Emoticon
Classic
Quick Basic
Forth
Serious
Scheme
Lua
Python
Ruby (beta)
支持的瀏覽器
IE 9-10
Chrome 10+
Safari 5
Firefox 3.6+
Opera 11+
iOS 5 Safari
開始 建立 JSREPL 建立依賴curl http://npmjs.org/install.sh | sh
使用 npm 安裝:sudo npm install -g coffee-script
獲取源碼git clone git://github.com/replit/jsrepl.git
git submodule update --init --recursive
進行 Bake 操作cake bake
引入 JSREPLhtml實例化 JSREPL
javascriptvar jsrepl = new JSREPL({ input: inputCallback, output: outputCallback, result: resultCallback, error: errorCallback, progress: progressCallback, timeout: { time: 30000, callback: timeoutCallback } });
inputCallback:一個回調(diào)函數(shù),當語言解釋器在請求用戶輸入時會被調(diào)用。
outputCallback:一個可選的回調(diào)函數(shù),當引擎需要將輸出發(fā)送到標準輸出時會被調(diào)用。
resultCallback:一個可選的回調(diào)函數(shù), 當解釋器成功地執(zhí)行(evaluated)一條程序并產(chǎn)生結(jié)果時會被調(diào)用。
errorCallback:一個可選的函數(shù),如果一條程序在被執(zhí)行(evaluated)的過程中產(chǎn)生錯誤時會被調(diào)用。
progress:一個可選的函數(shù),當加載一種語言時會被不斷調(diào)用,用來顯示進度條百分值。
timeout:為程序運行設(shè)置一個超時值。
time:等待時間(毫秒)。
callback:超時后會調(diào)用的回調(diào)函數(shù)。這個回調(diào)必須處理垃圾回收系統(tǒng)(比如說調(diào)用 jsrepl.loadLanguage 之類的)。必須返回 true 以停止超時的重復(fù)觸發(fā)。
API JSREPL::loadLanguage它會加載一個語言解釋器,并帶有三個參數(shù):
* 字符串 lang_name:需要加載的語言名。
* 方法 callback:回調(diào)函數(shù),當語言成功加載后會被調(diào)用。
* 布爾值 worker_friendly (可選):JSREPL 默認會嘗試加載一個解釋器到 Web Workers,這個參數(shù)會決定解釋器是加載到 Worker(true) 還是加載到一個 iframe(false)。
例子:
coffeescript jsrepl.loadLanguage("python", function () { alert("Python loaded"); });JSREPL::eval
在當前已加載的解釋器中執(zhí)行一條程序。帶有一個參數(shù):
字符串 command:需要執(zhí)行的程序字符串。
例子:
javascript jsrepl.eval("1+1");JSREPL::getLangConfig
返回該語言相應(yīng)的配置對象。帶有一個參數(shù):
字符串 lang_name:需要返回配置對象的語言。默認為當前語言名。
JSREPL::checkLineEnd給定一條命令,決定是否準備好執(zhí)行。因為有些情況是會導致暫時不準備執(zhí)行的,比如缺少右括號。
字符串 command:字符串,一條程序。
方法 callback:回調(diào)函數(shù),該回調(diào)函數(shù)會在命令(command)準備好執(zhí)行時返回 true,在命令未完整時返回 false。
JSREPL::on向一個或多個事件綁定一個監(jiān)聽器。帶有兩個參數(shù):
字符串 | 數(shù)組 event_type:事件類型,表示需要監(jiān)聽的事件。
方法 callback:回調(diào)函數(shù),事件被觸發(fā)時將會被調(diào)用。調(diào)用時會帶有事件提供的若干個參數(shù)。
JSREPL::off解除某事件的一個或全部的監(jiān)聽器的綁定。帶有兩個參數(shù):
字符串 | 數(shù)組 event_type:事件類型,表示需要解綁方法的事件。
方法 callback:回調(diào)函數(shù),提供需要解綁的方法。如果不提供將會解除所有方法。
JSREPL::once向一個或多個事件綁定一個只執(zhí)行一次的監(jiān)聽器。帶有兩個參數(shù):
字符串 | 數(shù)組 event_type:事件類型,表示需要監(jiān)聽的事件。
方法 callback:回調(diào)函數(shù),事件被觸發(fā)時將會被調(diào)用。調(diào)用時會帶有事件提供的若干個參數(shù)。
事件 input (輸入)當當前的語言解釋器請求輸入時會被觸發(fā)。參數(shù):
方法 callback:回調(diào)函數(shù),程序會連續(xù)執(zhí)行這個回調(diào)函數(shù)。調(diào)用時必須帶有用戶輸入的字符串。注意,這個回調(diào)函數(shù)只能被一個監(jiān)聽器調(diào)用。
output (輸出)當前的語言解釋器每次向標準輸出進行輸出時都會被觸發(fā)。參數(shù):
字符串 data:數(shù)據(jù),即輸出的字符串。
result (返回)當語言解釋器有最終返回值時會被觸發(fā)。參數(shù):
字符串 data:數(shù)據(jù),字符串的形式的最終返回值。
progress (進度)當 JSREPL 在加載語言解釋器時的進度百分比有變化時會被觸發(fā),用于報告進度。參數(shù):
浮點型 percentage:百分比,表示加載了多少文件。
timeout (超時)如果 JSREPL 在實例化時選擇了 timeout ,當正在運行的程序在限定時間內(nèi)未調(diào)用指定的回調(diào)函數(shù)(見 實例化 JSREPL),那么將會觸發(fā)此事件。
ready (已準備好)當語言已經(jīng)被加載完成并準備執(zhí)行時,將會觸發(fā)此事件。
一些標準輸入的 hack 問題編譯時使用 Emscripten 的語言解釋器期望輸入的是一個阻塞式的調(diào)用(同步),要使之變成阻塞式調(diào)用的唯一方法是在瀏覽器里用 window.prompt 提示。雖然不理想,但它是可行的。然而,這種方法將會使我們失去在 Web Workers 中加載解釋器的能力(因為 Workers 沒有使用對話框)。
在 Workers 中加載解釋器會有很多好處,包括當解釋器初始化或工作時不阻塞主 UI 線程,以及擁有捕獲無限循環(huán)的能力(見 timeout 事件)。盡管有這些優(yōu)勢,但為了能夠輸入,直到目前為止我們依然避免使用 Workers。所以我們加載阻塞式調(diào)用時應(yīng)該使用 iframe 而不是 Worker。不過,在當前 Firefox 和 Chrome 的版本中打破了我們這個方法,因為我們再也不能做同步的二進制 XHR 操作了(比如去讀取庫文件)。
解決方案 Webkit 瀏覽器在基于 Webkit 的瀏覽器中,我們可以利用非標準的 Web SQL 數(shù)據(jù)庫在主線程和 worker 線程之間共享資源。例如它們提供的同步機制,使它可以訪問主頁面線程和 Worker(見 repl.coffee 和 sandbox.js)。
Firefox遺憾,我們不能在 Firefox 進行同樣的處理,因為它沒有實現(xiàn) Web SQL,而且仍然不支持標準的瀏覽器端數(shù)據(jù)庫(IndexedDB)同步 API。相反,我們可以使用 XHR 在 Worker 和主線程之間進行同步通訊,而我們的服務(wù)器就是天然的代理。這里有一個樣例服務(wù)器安裝在 repl.it static server 。
許可jsREPL 在 MIT 許可下使用。jsREPL 的開發(fā)者對語言解釋器和修改過的 jsREPL 版本擁有自己的許可證,可以在它們的 extern/{語言名} 文件夾或子模塊下找到。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/85441.html
摘要:你可以指定導航欄文件名的內(nèi)容可以是這樣中文當然也支持二級列表,將生成一個下拉列表中文為什么是而不用想要實現(xiàn)的是用最簡單的方式動態(tài)渲染內(nèi)容。 showImg(https://segmentfault.com/img/bVGh1i?w=2562&h=1972); docsify 無需構(gòu)建快速生成文檔頁 網(wǎng)站:https://github.com/qingwei-li...文檔:https:...
摘要:你可以指定導航欄文件名的內(nèi)容可以是這樣中文當然也支持二級列表,將生成一個下拉列表中文為什么是而不用想要實現(xiàn)的是用最簡單的方式動態(tài)渲染內(nèi)容。 showImg(https://segmentfault.com/img/bVGh1i?w=2562&h=1972); docsify 無需構(gòu)建快速生成文檔頁 網(wǎng)站:https://github.com/qingwei-li...文檔:https:...
摘要:用于檢查中文編寫格式規(guī)范的命令行工具,基于開發(fā),且方便集成。忽略不檢查該規(guī)則警告,但不阻斷錯誤,且阻斷通過來忽略文件和目錄,語法。 lint-md 用于檢查中文 markdown 編寫格式規(guī)范的命令行工具,基于 AST 開發(fā),且方便集成 ci。Cli tool to lint your markdown file for Chinese. showImg(https://segment...
閱讀 3738·2021-09-09 09:33
閱讀 3024·2019-08-30 15:56
閱讀 3017·2019-08-30 15:56
閱讀 3307·2019-08-30 15:55
閱讀 499·2019-08-30 15:53
閱讀 2179·2019-08-30 15:52
閱讀 662·2019-08-28 18:16
閱讀 2391·2019-08-26 13:51