日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何快速將你的應(yīng)用封裝成JS-SDK?

 前言

創(chuàng)新互聯(lián)主要從事做網(wǎng)站、網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)靈丘,10年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108

本文將介紹前端如何封裝一款 js-sdk 以及如何快速將你的應(yīng)用變成 js-sdk , 我們將總結(jié)一些封裝 js-sdk 的原則和案例, 來幫大家更快的上手 sdk 開發(fā). 其中筆者還會以H5-Dooring 為例子, 介紹如何將 H5 頁面編輯器封裝成一個 js-sdk 供他人使用.

正文

在開始文章之前, 筆者先來介紹一下什么是 sdk .

sdk 即軟件開發(fā)工具包, 一般是一些軟件工程師為特定的軟件包、軟件框架、硬件平臺、操作系統(tǒng)等建立應(yīng)用軟件時的開發(fā)工具的集合。

對于 js-sdk 而言, 我們能舉出很多例子, 如下:

  • UI組件庫
  • 性能監(jiān)控工具, 如阿里 arms
  • 統(tǒng)計分析工具
  • 阿里云智能驗證sdk
  • 極驗驗證sdk

sdk 的目的是提高我們開發(fā)項目的效能, 安全性和便捷性等問題, 所以我們在設(shè)計 sdk 時一定要遵循一些原則, 如下:

  • 最小可用性原則:也就是沒有必要的功能/代碼盡量不額外添加, 使代碼達(dá)到最簡
  • 最少依賴原則: 也就是沒有必要的依賴堅決不添加, 以達(dá)到最低限度的外部依賴
  • 易擴(kuò)展: 插件化,最大限度支持?jǐn)U展和自定義
  • 穩(wěn)定性:絕不能導(dǎo)致宿主應(yīng)用崩潰,向后兼容, 可測試

在熟悉以上的背景和原則之后, 我們來看看如何實現(xiàn)一個 sdk 的案例.

將 H5-Dooring 封裝成一個 js-sdk

筆者在這拿 開源頁面制作工具 H5-Dooring來作為案例(當(dāng)然將其封裝成 sdk 也是我們迭代中的一部分, 甚至后期會做成npm包), 介紹如何封裝js-sdk, 我們先看一張抽象圖:

我們的 sdk 就好像一個完整系統(tǒng)的一個零件, 可以和系統(tǒng)中的其他模塊通信, 互相交換數(shù)據(jù). 總體而言 sdk 是為宿主系統(tǒng)服務(wù)的, 在 dooring-sdk 中 我們一方面要提供對外的接口支持, 另一方面需要支持宿主能控制 H5 編輯器的界面, 所以綜合分析下來我們有如下的初步規(guī)劃圖:

首先我們 sdk 采用 js 動態(tài)加載 iframe 的模式來實現(xiàn), 并通過 iframe 通信來實現(xiàn)props 傳遞, 此時可以有兩種比較靠譜的通信方案:

  • 使用 postmessage 實現(xiàn)跨域跨系統(tǒng)通信
  • 使用 url 參數(shù)通信

由于 postmessage 對宿主系統(tǒng)要求比較高, 需要宿主手動配置 origin 白名單, 對可插拔式體驗不夠友好, 所以筆者這里采用了比較常用的 url 通行方式, 這里需要對參數(shù)做解析, 最后達(dá)到一個比較簡單的接入方式, 如下:

 
 
 
 
  1. var dooringOpts = {
  2.     container: '',  // 掛載到哪個dom節(jié)點(diǎn)上
  3.     iframeStyle: {  // iframe自定義樣式
  4.         width: '',
  5.         height: '',
  6.         border: ''
  7.     },
  8.     controls: {
  9.       gallery: false,  // 是否啟動圖片庫
  10.       template: false, // 是否啟用模版庫
  11.       saveTemplate: true,  // 參數(shù)可以是true/false,表示是否啟動下載代碼, 也可以是函數(shù), 用來自定義下載代碼邏輯
  12.       save: true,  // 參數(shù)可以是true/false,表示是否啟動下載代碼, 也可以是函數(shù), 用來自定義下載代碼邏輯
  13.       downCode: true, // 參數(shù)可以是true/false,表示是否啟動下載代碼, 也可以是函數(shù), 用來自定義下載代碼邏輯
  14.       isPhoneTest: false,
  15.       helpPage: true,   // false/true表示隱藏/顯示幫助頁面
  16.       uploadApi: '',  // 自定義上傳api
  17.       formApi: '',  // 自定義表單提交api
  18.       screenshotsApi: ''  // 自定義截圖提交api
  19.     }

用戶只需要在全局定義好配置的 props 和 callback , 即可自由定制 H5-Dooring. 接下來我們只需要再引入 dooring-sdk即可(注意先定義全局變量, 再引入sdk):

 
 
 
 

以上只是確定了 js-sdk 的方案和最終調(diào)用效果, 接下來我們來看看如何去實現(xiàn)它. 也就是 dooring-sdk 內(nèi)部到底做了那些工作. 我們先看一張實現(xiàn)機(jī)制圖:

由上圖分析可知我們需要提前把用戶定義的全局配置解析成 url 參數(shù), 然后將動態(tài)創(chuàng)建的 iframe 的 src 屬性設(shè)置為 dooring url + parmas的結(jié)構(gòu), 具體實現(xiàn)如下:

 
 
 
 
  1. (function(){
  2.       let iframe = document.createElement('iframe');
  3.       let tid = Date.now();
  4.       let sdk_domain_path = 'http://xxxx/xxxx';
  5.       iframe.src = sdk_domain_path + '/h5_plus/editor?tid=' + tid + '&' + getDooringApiStr(dooringOpts) + '&isOpen=1';
  6.       iframe.style.border = 'none';
  7.       iframe.style.width = '100vw';
  8.       iframe.style.height = '100vh';
  9.       if(dooringOpts && dooringOpts.iframeStyle) {
  10.           iframe.style.border = dooringOpts.iframeStyle.border || 'none';
  11.           iframe.style.width = dooringOpts.iframeStyle.width || '100vw';
  12.           iframe.style.height = dooringOpts.iframeStyle.height || '100vh';
  13.       }
  14.       document.querySelector(dooringOpts.container || 'body').appendChild(iframe);
  15.       function getDooringApiStr(opt) {
  16.           let controls = Object.assign({
  17.               gallery: false,
  18.               template: false,
  19.               saveTemplate: true,  // 參數(shù)可以是true/false,表示是否啟動下載代碼, 也可以是函數(shù), 用來自定義下載代碼邏輯
  20.               save: true,  // 參數(shù)可以是true/false,表示是否啟動下載代碼, 也可以是函數(shù), 用來自定義下載代碼邏輯
  21.               downCode: true, // 參數(shù)可以是true/false,表示是否啟動下載代碼, 也可以是函數(shù), 用來自定義下載代碼邏輯
  22.               isPhoneTest: false,
  23.               helpPage: true,   // false/true表示隱藏/顯示幫助頁面
  24.               uploadApi: '',
  25.               formApi: '',
  26.               screenshotsApi: ''
  27.           }, opt.controls || {})
  28.           let params = '';
  29.           for(let key in controls) {
  30.               params += key + '=' + encodeURI(controls[key]) + '&'
  31.           }
  32.           return params.slice(0, params.length -1)
  33.       }
  34. })()

以上只是個簡單的實現(xiàn)實現(xiàn)思路, 是不是有點(diǎn)傳統(tǒng)的寫jquery插件的感覺? 同時我們還需要配合 h5-dooring 內(nèi)部去支持解析 parmas 等操作, 這里感興趣的可以自行研究. 當(dāng)然 sdk 的實現(xiàn)方式還有很多, 期待大家的探索.

最后

以上方案筆者已經(jīng)集成到 H5-Dooring 中,大家可以以 sdk 的方式體驗一下。github 地址:所見即所得的H5頁面編輯器H5-Dooring


當(dāng)前題目:如何快速將你的應(yīng)用封裝成JS-SDK?
標(biāo)題來源:http://www.5511xx.com/article/ccdjoej.html