編寫(xiě)插件之前,我們需要了解插件的運(yùn)行機(jī)制以便進(jìn)行開(kāi)發(fā)。
摹客DT的插件是使用 JavaScript、HTML 和 CSS 編寫(xiě)的,類似于瀏覽器的環(huán)境。但使用JavaScript編寫(xiě)摹客DT 插件與使用JavaScript 編寫(xiě)網(wǎng)站是不同的。
為了使插件更安全更穩(wěn)定,我們使用了一個(gè)執(zhí)行模型,可以在沙箱中的主線程上運(yùn)行插件代碼。沙箱是一個(gè)最小的 JavaScript 環(huán)境,不會(huì)暴露瀏覽器的 API,這意味著你擁有所有可用的標(biāo)準(zhǔn) JavaScript ES6 庫(kù),包括標(biāo)準(zhǔn)類型、JSON 和 Promise API、二進(jìn)制類型等。但是如 XMLHttpRequest 和 DOM 瀏覽器 API 則不能直接從沙箱中獲得。你需要?jiǎng)?chuàng)建一個(gè)<iframe>內(nèi)部帶有<script>標(biāo)簽,在<iframe>內(nèi)部,你可以編寫(xiě)任何HTML/JavaScript并訪問(wèn)瀏覽器API。
主線程可以訪問(wèn) 摹客DT文件的層次結(jié)構(gòu),但是不能訪問(wèn)瀏覽器 API。相反,iframe 可以訪問(wèn)瀏覽器 API,但不能訪問(wèn)摹客DT文件的層次結(jié)構(gòu)。主線程和 iframe 可以通過(guò)消息傳遞相互通信。
插件完成工作時(shí)通過(guò)調(diào)用 mockplus.closePlugin() 來(lái)關(guān)閉主線程。
主線程可以訪問(wèn) 摹客DT文件的層次結(jié)構(gòu),但是不能訪問(wèn)瀏覽器 API。相反,iframe 可以訪問(wèn)瀏覽器 API,但不能訪問(wèn)摹客DT文件的層次結(jié)構(gòu)。主線程和 iframe 可以通過(guò)消息傳遞相互通信。
插件完成工作時(shí)通過(guò)調(diào)用 mockplus.closePlugin() 來(lái)關(guān)閉主線程。