成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何快速將你的應用封裝成JS-SDK?

開發 前端
本文將介紹前端如何封裝一款 js-sdk 以及如何快速將你的應用變成 js-sdk , 我們將總結一些封裝 js-sdk 的原則和案例, 來幫大家更快的上手 sdk 開發.

 前言

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

正文

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

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

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

  • UI組件庫
  • 性能監控工具, 如阿里 arms
  • 統計分析工具
  • 阿里云智能驗證sdk
  • 極驗驗證sdk

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

 

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

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

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

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


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


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

  • 使用 postmessage 實現跨域跨系統通信
  • 使用 url 參數通信

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

  1. var dooringOpts = { 
  2.     container: '',  // 掛載到哪個dom節點上 
  3.     iframeStyle: {  // iframe自定義樣式 
  4.         width: ''
  5.         height: ''
  6.         border: '' 
  7.     }, 
  8.     controls: { 
  9.       gallery: false,  // 是否啟動圖片庫 
  10.       template: false, // 是否啟用模版庫 
  11.       saveTemplate: true,  // 參數可以是true/false,表示是否啟動下載代碼, 也可以是函數, 用來自定義下載代碼邏輯 
  12.       save: true,  // 參數可以是true/false,表示是否啟動下載代碼, 也可以是函數, 用來自定義下載代碼邏輯 
  13.       downCode: true, // 參數可以是true/false,表示是否啟動下載代碼, 也可以是函數, 用來自定義下載代碼邏輯 
  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):

  1. <script src="http://49.234.61.19/dooring-sdk.js"></script> 

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

由上圖分析可知我們需要提前把用戶定義的全局配置解析成 url 參數, 然后將動態創建的 iframe 的 src 屬性設置為 dooring url + parmas的結構, 具體實現如下:

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

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

最后

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

 

責任編輯:姜華 來源: 趣談前端
相關推薦

2015-02-12 16:57:35

微信SDK

2015-02-12 17:48:54

微信SDK

2015-02-12 17:23:33

微信SDK

2015-02-12 17:28:23

微信SDK

2015-01-13 13:57:52

2015-01-28 00:35:00

2021-04-30 17:35:16

前端開發技術熱點

2023-05-10 09:24:10

TypeScript工具

2011-03-30 14:31:25

Mssql數據庫

2021-06-07 19:26:50

WindowsDocker工作站

2009-09-08 17:45:13

Ophone Widg

2013-03-26 14:45:21

HTML5封裝成and

2023-06-19 09:01:17

2012-11-23 17:20:43

Linux服務器

2019-12-20 14:10:19

Python腳本語言工具

2017-05-10 16:09:12

MySQL數據庫查詢

2020-11-25 10:42:57

Python代碼工具

2021-08-31 08:32:40

開源項目開發

2014-09-01 09:49:24

github

2022-05-11 17:21:05

Btrfs文件系統Fedora
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲性视频网站 | 亚洲另类春色偷拍在线观看 | 亚洲区一区二区 | 99精品视频免费观看 | 国产成人免费视频网站高清观看视频 | 日本网站免费观看 | 久久精品视频在线免费观看 | 国产第一页在线观看 | 日韩av一二三区 | 午夜一区 | 精品国产一区二区三区四区在线 | 国产精品免费一区二区三区四区 | 亚洲国产成人精品女人久久久 | 久久精品国产一区二区电影 | 91九色视频| 91精品国产一区二区三区香蕉 | 97精品超碰一区二区三区 | 精品国产乱码久久久久久牛牛 | 日本三级全黄三级a | av中文字幕在线播放 | 久草免费视 | 国产成人一区二区三区久久久 | 久久成人免费视频 | 给我免费的视频在线观看 | 欧美一区二区三区精品 | 欧美久久国产 | 成人3d动漫一区二区三区91 | 99re在线视频免费观看 | 久久久久久亚洲精品不卡 | 在线观看成人小视频 | 国产精品高潮呻吟久久av野狼 | 久久免费高清视频 | 亚洲在线免费观看 | 国产美女在线观看 | 一区二区影视 | 一区二区三区日本 | 一a一片一级一片啪啪 | 国产成人一区二区三区 | 久久国产综合 | 亚洲综合激情 | www狠狠爱com |