uihtml

Создание компонента HTML UI

Описание

h = uihtml создает HTML пользовательский интерфейс компонента в новом рисунке и возвращает HTML Объект компонента пользовательского интерфейса. MATLAB® вызывает uifigure функция для создания рисунка.

С uihtml функция, можно встраивать HTML, JavaScript®или содержимое CSS в приложении и интерфейс со сторонними библиотеками для отображения содержимого, такого как виджеты или визуализация данных. Все поддерживающие файлы (включая HTML, JavaScript, CSS, изображения) должны быть сохранены в месте, к которому может получить доступ ваша локальная файловая система.

пример

h = uihtml(parent) создает компонент пользовательского интерфейса HTML в указанном родительском контейнере. Родительским элементом может быть Figure объект, созданный с помощью uifigure функции или одного из дочерних контейнеров.

пример

h = uihtml(___,Name,Value) задает свойства компонентов пользовательского интерфейса HTML с помощью одного или нескольких аргументов пары "имя-значение". Для примера, 'HTMLSource','timepicker.html' устанавливает источник HTML на указанный HTML- файл.

Примеры

свернуть все

Создайте HTML компонента и отобразите в нем форматированный текст с помощью HTML разметки.

fig = uifigure('Position',[561 497 333 239]);
h = uihtml(fig);
h.HTMLSource = '<p style="font-family:arial;"><b><span style="color:red;">Hello</span> <u>World</u>!</b></p>';

Создайте файл HTML, чтобы встраивать аудио и видео элементов в ваши приложения и ссылку исходные файлы носителя.

Сначала создайте пустой компонент пользовательского интерфейса HTML на рисунке.

fig = uifigure;
fig.Position = [500 500 380 445];

h = uihtml(fig);
h.Position = [10 10 360 420];

Затем создайте HTML файла под названием audio_videoplayers.html. В файл добавьте аудио и видео элементов и укажите их источники файлов относительно пути к файлу HTML. В этом примере медиа- файлов находятся в той же директории, что и HTML файла.

<!DOCTYPE html>
<html>
	<body style="background-color:white;font-family:arial;">
		<p style="padding-left:20px">
		Play audio file:
		</p>
		
		<audio controls style="padding-left:20px">
			<source src="./handel_audio.wav" type="audio/wav">
			<source src="./handel_audio.oga" type="audio/ogg">
			Your browser does not support the audio tag.
		</audio>
		
		<p style="padding-left:20px">
		Play video file:
		</p>
		
		<video width="320" height="240" controls style="padding-left:20px">
			<source src="./xylophone_video.mp4" type="video/mp4">
			<source src="./xylophone_video.oga" type="video/ogg">
			Your browser does not support the video tag.
		</video>
		
	</body>
</html>

Теперь встройте HTML файла в ваше приложение, установив HTMLSource свойство полного пути к файлу.

h.HTMLSource = fullfile(pwd,'audio_videoplayers.html');

Создайте htmlComponent Объект JavaScript ®, который отображает данные, установленные в компоненте пользовательского интерфейса HTML в MATLAB ®.

Сначала создайте пустой компонент пользовательского интерфейса HTML и поместите его в рисунок.

fig = uifigure;
fig.Position = [500 500 490 180];

h = uihtml(fig);
h.Position = [20 20 450 130];

Затем создайте HTML файла под названием displayDataFromMATLAB.html. В файле,

  • Использование style тег для определения внутренних стилей CSS для <div> элементы, которые отображают текст.

  • Написание setup функция внутри <script> тег для подключения вашего объекта JavaScript, называемый htmlComponent, к компоненту пользовательского интерфейса HTML, созданному в MATLAB.

  • Добавьте прослушиватель событий в setup функция. Прослушиватель событий слушает "DataChanged" события на htmlComponent Объект JavaScript и создает функцию обратного вызова прослушивателя. Когда "DataChanged" происходит событие, функция обратного вызова прослушивателя обновляет "dataDisplay" <div> element со значением, которое устанавливается в Data свойство в MATLAB.

<!DOCTYPE html>
<html>
<head>
<style>
#prompt {
  font-family: sans-serif;
  text-align:center;
  border-radius: 5px;
  background-color: lightblue;
  padding: 20px;
}

#dataDisplay {
  border-radius: 5px;
  height: 10vh;
  padding: 12px 20px;
}
</style>

<script type="text/javascript">
         
        function setup(htmlComponent) {
		          
            htmlComponent.addEventListener("DataChanged", function(event) {
            document.getElementById("dataDisplay").innerHTML = htmlComponent.Data;
            });     
        }
</script>
</head>

<body>
     <div id="prompt">
		
	<span><label for="prompt"><strong>Data from MATLAB will display here:</strong></label></span>
	<br/><br/>
	<div id ="dataDisplay">
	Please set data in MATLAB...
	</div>
		
     </div>
</body>

</html>

Теперь в MATLAB задайте значение HTMLSource свойство пути к HTML файла.

h.HTMLSource = fullfile(pwd,'displayDataFromMATLAB.html');

Установите значение Data свойство для компонента HTML UI. Заметьте, как htmlComponent Обновление объекта JavaScript в компоненте пользовательского интерфейса HTML.

h.Data = "Hello World!";

Создайте htmlComponent Объект JavaScript ®, который генерирует случайное число при нажатии кнопки и отображает число в MATLAB ®.

Сначала создайте пустой компонент пользовательского интерфейса HTML и поместите его в рисунок.

fig = uifigure;
fig.Position = [500 500 490 180];

h = uihtml(fig);
h.Position = [20 20 450 130];

Затем создайте HTML файла под названием generateJSRandomNumber.html. В файле,

  • Использование style тег для определения внутренних стилей CSS для элемента кнопки.

  • Написание setup функция внутри <script> тег для подключения вашего объекта JavaScript, называемый htmlComponent, к компоненту пользовательского интерфейса HTML, созданному в MATLAB.

  • Добавьте прослушиватель событий в setup функция. Прослушиватель событий слушает "click" события на кнопке и создает функцию обратного вызова прослушивателя. Когда происходит событие нажатия кнопки, функция обратного вызова прослушивателя устанавливает Data свойство htmlComponent Объект JavaScript в случайным образом сгенерированное целое число между 1 и 100.

<!DOCTYPE html>
<html>
<head>
<style>
button {
  width: 100%;
  font-family: sans-serif;
  background-color: #4CAF50;
  color: white;
  font-size: 1rem;
  text-shadow: 1px 1px 1px #000;
  padding: 5px 20px;
  margin: 8px 0;
  border: none;
  border-radius: 10px;
  line-height: 2.5;
  cursor: pointer;
  background-image: linear-gradient(to top left,
                                      rgba(0, 0, 0, .2),
                                      rgba(0, 0, 0, .2) 30%,
                                      rgba(0, 0, 0, 0));
  box-shadow: inset 2px 2px 3px rgba(255, 255, 255, .6),
             inset -2px -2px 3px rgba(0, 0, 0, .6);
}

button:hover {
  background-color: #45a049;
}

button:focus {
outline: 0;
}

button:active {
    box-shadow: inset -2px -2px 3px rgba(255, 255, 255, .6),
                inset 2px 2px 3px rgba(0, 0, 0, .6);
}
</style>

   <script type="text/javascript">
         
      function setup(htmlComponent) {
                      
         document.getElementById("generateRandomNumber").addEventListener("click", function(event) {
            htmlComponent.Data = Math.floor(Math.random() * 100) + 1;
         });
      }
   </script>
</head>

   <body>
     <button id="generateRandomNumber">Generate Random Number</button><br/> 
   </body>
	
</html>

Теперь в MATLAB задайте значение HTMLSource свойство пути к HTML файла. Создайте DataChangedFcn функция обратного вызова, которая отображает случайное число, генерируемое кодом JavaScript. Нажмите кнопку «Сгенерировать случайное число», чтобы увидеть значение Data отображение свойства в Командном Окне MATLAB.

h.HTMLSource = fullfile(pwd,'generateJSRandomNumber.html');
h.DataChangedFcn = @(src,event)disp(h.Data);

Входные параметры

свернуть все

Родительский контейнер, заданный как Figure объект, созданный с использованием uifigure функция, или один из ее дочерних контейнеров: Tab, Panel, ButtonGroup, или GridLayout. Если вы не задаете родительский контейнер, MATLAB вызывает uifigure функция для создания нового Figure объект, который служит родительским контейнером.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: h = uihtml(uifigure,'HTMLSource','C:\Work\expenses.html');

Примечание

Перечисленные здесь свойства являются только подмножеством. Полный список см. в разделе Свойства HTML.

HTML разметки или файл, заданный как вектор символов или строковый скаляр, который содержит HTML разметки или путь к файлу HTML. Все разметки HTML и файлы должны быть хорошо сформированы. Если заданный вектор символов или строковый скаляр заканчиваются на .html, тогда принято, что это путь к HTML файла.

При внедрении разметки HTML вам не нужно указывать <html> или <body> теги. Если указанная разметка поддерживается в браузере Chromium, используемом фигурами MATLAB, созданными с помощью uifigure функция, тогда она отобразится. Если вам нужно больше структуры в коде, то рассмотрите использование HTML файла вместо этого.

Если вы задаете HTMLSource свойство пути к HTML-файлу, HTML-файл должен располагаться в месте, к которому может получить доступ локальная файловая система. Если вы используете вспомогательные файлы, такие как JavaScript, CSS, библиотеки или изображения, поместите файлы в место, к которому может получить доступ ваша локальная файловая система, ссылитесь на них в HTML и установите HTMLSource свойство пути к HTML файла. Вспомогательные файлы не могут находиться в относительной директории, расположенном рядом с HTML или выше.

Пример: h = uihtml('HTMLSource','CustomCharts.html') задает HTML файла.

Пример: h = uihtml('HTMLSource','<p>This is <span style="color:red">red</span> text.</p>') задает разметку.

Данные MATLAB, заданные как любой тип данных MATLAB. Используйте этот аргумент, когда значение HTMLSource - путь к HTML файла, определяющему объект JavaScript. Затем эти данные могут быть синхронизированы между компонентом UI MATLAB HTML и объектом JavaScript.

Чтобы синхронизировать значение Data свойство между MATLAB и сторонним содержимым, который вы внедряете в ваше приложение, создайте setup функция в HTML файла, которая соединяет объект JavaScript под названием htmlComponent в компонент HTML UI в MATLAB. Затем установите HTMLSource значение свойства пути к файлу.

Изменения в значении Data свойство инициирует события коллбэка только в одном направлении. В частности,

  • Когда Data свойство установлено в MATLAB, Data свойство htmlComponent Объект JavaScript также обновляет и запускает прослушиватели событий JavaScript 'DataChanged' событие.

  • Когда htmlComponent.Data задан в JavaScript, Data свойство компонента HTML UI в MATLAB также обновляет и запускает DataChangedFcn коллбэк.

Если у вас есть данные, такие как вложенные массивы ячеек, массивы структур или данные массива таблиц MATLAB, вам может понадобиться дополнительная информация о том, как данные преобразуются между MATLAB и JavaScript. Когда Data свойство HTML UI компонента задано в MATLAB, данные преобразованы с помощью jsonencode функция, синхронизированная с JavaScript, проанализированная с помощью JSON.parse (), и, наконец, установленная на Data свойство htmlComponent Объект JavaScript. Преобразования происходят в противоположном направлении также посредством JSON.stringify () и jsondecode функция. The Data свойство является единственным свойством, которое синхронизируется с JavaScript.

См. jsonencode для получения дополнительной информации о типах данных, которые она поддерживает. Если jsonencode функция не поддерживает ваш тип данных, затем используйте функцию преобразования типа данных, например num2str, для преобразования данных в поддерживаемый тип. Затем установите его как значение Data свойство.

Для получения дополнительной информации о том, как записать HTML файла, который позволяет синхронизировать данные и свойства htmlComponent Объект JavaScript, см., Создают HTML Файла, Которые Могут Вызвать или Ответить На Изменения Данных.

Коллбэк при изменении данных, заданный как одно из следующих значений:

  • Указатель на функцию.

  • Массив ячеек, в котором первый элемент является указателем на функцию. Последующие элементы массива ячеек являются аргументами, которые передаются в функцию обратного вызова.

  • Вектор символов, содержащий допустимое выражение MATLAB (не рекомендуемый). MATLAB оценивает это выражение в базовом рабочем пространстве.

Когда значение Data изменения свойств в htmlComponent Объект JavaScript, Data свойство компонента MATLAB HTML UI обновляется, и этот коллбэк выполняется.

Эта функция обратного вызова может получить доступ к определенной информации об изменениях данных в объекте JavaScript. MATLAB передает информацию в DataChangedData объект как второй аргумент функции обратного вызова. В App Designer аргумент называется event. Можно запросить DataChangedData свойства объекта с использованием записи через точку. Для примера, event.PreviousData возвращает предыдущее значение Data до последнего обновления или изменения. The DataChangedData объект недоступен для функций обратного вызова, заданных как векторы символов.

В этой таблице перечислены свойства DataChangedData объект.

СвойствоОписание
DataСамые последние данные, полученные в результате последнего DataChanged событие
PreviousDataДанные перед последней DataChanged событие
Source

Компонент пользовательского интерфейса HTML MATLAB, который выполняет коллбэк

EventName'DataChanged'

Для получения дополнительной информации о записи коллбэков см. Раздел «Запись коллбэков в App Designer».

Расположение и размер HTML компонента пользовательского интерфейса относительно родительского контейнера, заданные как четырехэлементный вектор формы [left bottom width height]. Эта таблица описывает каждый элемент в векторе.

ЭлементОписание
leftРасстояние от внутреннего левого края родительского контейнера до внешнего левого края компонента HTML UI
bottomРасстояние от внутреннего нижнего ребра родительского контейнера до внешнего нижнего ребра компонента HTML UI
widthРасстояние между правым и левым внешними краями компонента HTML UI
heightРасстояние между верхним и нижним внешними краями компонента HTML UI

The Position значения относятся к drawable area родительского контейнера. Область векторной и растровой графики является областью внутри границ контейнера и не включает область, занимаемую украшениями, такими как панель меню или заголовок.

Все измерения указаны в пикселях модулей.

Ограничения

  • Вы не можете ссылаться на веб-ресурсы URL или встраивать приложения из внешних веб-страниц, используя uihtml функция.

  • HTML файлов, которую вы задаете для HTMLSource свойство не может получить доступ к сторонним библиотекам JavaScript через сеть доставки содержимого (CDN). Сохраните библиотеки в том месте, к которому может получить доступ ваша локальная файловая система.

  • На общие типы веб- файла, такие как JavaScript и CSS, можно ссылаться из HTML файла, заданной для HTMLSource свойство, но другие типы веб- файла могут не поддерживаться.

  • Содержимое не может переполнить границы компонента пользовательского интерфейса HTML. Если вы создаете динамическое содержимое, как всплывающие виджеты, сделайте размер вашего HTML пользовательского интерфейса компонента достаточно большим, чтобы отобразить виджет, когда всплывающее окно находится в открытом состоянии.

  • На рабочем столе MATLAB не поддерживаются некоторые функции HTML, такие как веб-плагины и доступ к веб-камерам или микрофонам.

  • Вы не можете задать HTMLSource свойство для HTML файла, который имеет параметры запроса, добавленные к его файлу имени. В качестве обходного пути установите эти параметры в htmlComponent.Data.

  • Гиперссылки с matlab: операции не поддерживаются.

Подробнее о

свернуть все

Потенциальные угрозы безопасности

Примечание

Этот список не должен быть всеобъемлющим. При взаимодействии со сторонними библиотеками обратитесь к внешним ресурсам за дополнительными угрозами и факторами безопасности.

Приложения, которые взаимодействуют со сторонними библиотеками JavaScript, потенциально уязвимы к атакам инъекций данных или кода.

  • Функции MATLAB, такие как eval функция может увеличить риск инъекционных атак. В качестве контрмеры проверьте ненадежный вход перед его использованием в MATLAB.

  • Любая функция MATLAB, обрабатывающая кодоподобный вход (XML, JSON, SQL и т.д.), потенциально уязвима для инъекций кода.

  • Приложения, которые получают доступ к операционной системе с помощью MATLAB system, dos, или unix функции могут быть уязвимы для инъекции кода.

Дополнительные сведения о том, как уменьшить потенциальный риск для развёрнутых веб- приложений, см. в разделе Создание безопасных веб- Приложениях (MATLAB Compiler).

Совет

  • Если вы создаете HTML файла для встраивания в приложение, сначала проверьте, что статический HTML отображается правильно в браузере. Для получения дополнительной информации смотрите HTML Файла, которые могут вызвать или ответить на изменения данных.

  • Если необходимо обновить значение HTMLSource свойство, используйте это решение, чтобы сохранить исходное значение HTMLSource в переменную сбросьте HTMLSource на пустое значение и обновить рисунок, чтобы удалить ее содержимое и, наконец, задать HTMLSource назад к его исходному значению.

    oldValue = h.HTMLSource;
    h.HTMLSource = '';
    drawnow()
    h.HTMLSource = oldValue;

  • Фигуры MATLAB, созданные с помощью uifigure используйте браузер Chromium и запустите HTML5. Новые версии Chromium выпускаются часто и могут варьироваться в зависимости от операционных систем. Для получения информации о поддерживаемых функциях и функциональности обратитесь к внешним ресурсам Chromium. Учитывайте этот фактор, если вы планируете делиться приложением или использовать его в различных окружениях.

  • Проверьте внешние ресурсы, такие как https://caniuse.com/, на наличие типов функций, поддерживаемых в различных настольных и веб-браузерах.

  • MathWorks® не продвигает сторонние библиотеки.

Введенный в R2019b