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