предисловие
Эта статья познакомитвнешний интерфейсКак упаковатьjs-sdk
и как быстро превратить ваше приложение вjs-sdk
, мы суммируем некоторые инкапсуляцииjs-sdk
принципы и кейсы, которые помогут вам быстрее начать работуsdk
Среди них автор также будет использоватьH5-DooringКак пример, какРедактор страницы H5упакован вjs-sdk
для использования другими.
текст
Прежде чем начать статью, автор сначала представит, что такоеsdk
.
SDK означает комплект для разработки программного обеспечения, который обычно представляет собой набор инструментов разработки, используемых некоторыми разработчиками программного обеспечения для создания прикладного программного обеспечения для определенных пакетов программного обеспечения, программных сред, аппаратных платформ, операционных систем и т. д.
дляjs-sdk
, мы можем привести много примеров, например:
- библиотека компонентов пользовательского интерфейса
- Инструменты мониторинга производительности, такие как руки Alibaba
- Инструменты статистического анализа
- SDK для смарт-аутентификации в облаке Alibaba
- Экстремальная проверка 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
Для общего метода здесь необходимо проанализировать параметры, и, наконец, достигается относительно простой метод доступа, как показано ниже:
var dooringOpts = {
container: '', // 挂载到哪个dom节点上
iframeStyle: { // iframe自定义样式
width: '',
height: '',
border: ''
},
controls: {
gallery: false, // 是否启动图片库
template: false, // 是否启用模版库
saveTemplate: true, // 参数可以是true/false,表示是否启动下载代码, 也可以是函数, 用来自定义下载代码逻辑
save: true, // 参数可以是true/false,表示是否启动下载代码, 也可以是函数, 用来自定义下载代码逻辑
downCode: true, // 参数可以是true/false,表示是否启动下载代码, 也可以是函数, 用来自定义下载代码逻辑
isPhoneTest: false,
helpPage: true, // false/true表示隐藏/显示帮助页面
uploadApi: '', // 自定义上传api
formApi: '', // 自定义表单提交api
screenshotsApi: '' // 自定义截图提交api
}
};
Пользователям нужно только определить конфигурацию в глобальномprops
а такжеcallback
, вы можете свободно настроитьH5-Dooring
Далее нам нужно только ввести dooring-sdk (обратите внимание, что сначала определяются глобальные переменные, а затем вводится sdk):
<script src="http://49.234.61.19/dooring-sdk.js"></script>
Выше это точноjs-sdk
Схема и эффект финального вызова, посмотрим как реализовать.dooring-sdk
Какая работа была проделана внутри. Давайте сначала посмотрим на схему механизма реализации:
Из анализа приведенного выше рисунка видно, что нам нужно разобрать определяемую пользователем глобальную конфигурацию наurl
параметры, которые затем будут создаваться динамическиiframe
изsrc
свойство установлено наdooring url
+ parmas
Структура реализована следующим образом:
(function(){
let iframe = document.createElement('iframe');
let tid = Date.now();
let sdk_domain_path = 'http://xxxx/xxxx';
iframe.src = sdk_domain_path + '/h5_plus/editor?tid=' + tid + '&' + getDooringApiStr(dooringOpts) + '&isOpen=1';
iframe.style.border = 'none';
iframe.style.width = '100vw';
iframe.style.height = '100vh';
if(dooringOpts && dooringOpts.iframeStyle) {
iframe.style.border = dooringOpts.iframeStyle.border || 'none';
iframe.style.width = dooringOpts.iframeStyle.width || '100vw';
iframe.style.height = dooringOpts.iframeStyle.height || '100vh';
}
document.querySelector(dooringOpts.container || 'body').appendChild(iframe);
function getDooringApiStr(opt) {
let controls = Object.assign({
gallery: false,
template: false,
saveTemplate: true, // 参数可以是true/false,表示是否启动下载代码, 也可以是函数, 用来自定义下载代码逻辑
save: true, // 参数可以是true/false,表示是否启动下载代码, 也可以是函数, 用来自定义下载代码逻辑
downCode: true, // 参数可以是true/false,表示是否启动下载代码, 也可以是函数, 用来自定义下载代码逻辑
isPhoneTest: false,
helpPage: true, // false/true表示隐藏/显示帮助页面
uploadApi: '',
formApi: '',
screenshotsApi: ''
}, opt.controls || {})
let params = '';
for(let key in controls) {
params += key + '=' + encodeURI(controls[key]) + '&'
}
return params.slice(0, params.length -1)
}
})()
Вышеупомянутое является просто простой идеей реализации.Не слишком ли традиционно писать подключаемый модуль jquery?В то же время нам также необходимо сотрудничатьh5-dooring
Внутренний для поддержки синтаксического анализаparmas
и другие операции, интересующиеся могут изучить сами.sdk
Есть еще много способов реализовать это, и я с нетерпением жду вашего исследования.
наконец
Автор вышеуказанной схемы был интегрирован вH5-Dooring, вы можете использоватьsdkспособ испытать это.
адрес гитхаба:WYSIWYG Редактор страниц H5 H5-Dooring
больше рекомендаций
- Реализовать визуальный редактор страницы h5 на основе React+Koa-Dooring.
- Как реализовать функцию предварительного просмотра в реальном времени и предварительного просмотра кода сканирования машины в редакторе H5
- Схема загрузки изображений и библиотеки изображений для редактора H5
- Начало работы с онлайн-разработкой IDE для внедрения онлайн-редактора кода с нуля
- Как создать библиотеку шаблонов в редакторе H5 и реализовать автоматическую генерацию обложки