библиотека dart:js
Низкоуровневая поддержка взаимодействия с JavaScript.
Обычно вместо этой библиотеки следует использовать package:js. Подробнее см. на странице взаимодействия с JS.
Эта библиотека предоставляет доступ к объектам JavaScript из Dart, позволяя коду Dart получать и задавать свойства, вызывать методы объектов JavaScript и вызывать функции JavaScript. Библиотека выполняет преобразование объектов Dart и JavaScript, когда это возможно, и предоставляет прокси, если преобразование невозможно.
Эта библиотека не позволяет использовать объекты Dart из JavaScript: их методы и свойства недоступны, хотя библиотека позволяет передавать функции Dart в JavaScript и вызывать их оттуда.
JsObject — это основной тип, представляющий прокси объекта JavaScript. JsObject предоставляет доступ к свойствам и методам базового объекта JavaScript. JsObjects можно получить при вызове JavaScript или создать из прокси конструкторов JavaScript.
Геттер верхнего уровня context предоставляет JsObject, представляющий глобальный объект JavaScript, обычно window.
В следующем примере с помощью вызова глобальной функции JavaScript alert() отображается диалоговое окно с предупреждением:
import 'dart:js';
main() => context.callMethod('alert', ['Hello from Dart!']); В этом примере показано, как создать JsObject из конструктора JavaScript и получить доступ к его свойствам:
import 'dart:js';
main() {
var object = JsObject(context['Object']);
object['greeting'] = 'Hello';
object['greet'] = (name) => "${object['greeting']} $name";
var message = object.callMethod('greet', ['JavaScript']);
context['console'].callMethod('log', [message]);
} Прокси и автоматическое преобразование
При задании свойств JsObject или передаче аргументов методу либо функции JavaScript объекты Dart автоматически преобразуются в объекты JavaScript или оборачиваются в прокси. При обращении к свойствам JavaScript или вызове замыкания Dart из JavaScript объекты JavaScript также преобразуются в объекты Dart.
Функции и замыкания оборачиваются в прокси таким образом, чтобы их можно было вызывать. Замыкание Dart, присвоенное свойству JavaScript, оборачивается в функцию JavaScript. Функция JavaScript, доступная из Dart, оборачивается в JsFunction, у которого есть метод JsFunction.apply для её вызова.
Следующие типы передаются напрямую и не оборачиваются в прокси:
- Базовые типы:
null,bool,num,String,DateTime -
TypedData, включая подклассы, такие какInt32List, но неByteBuffer - При компиляции для веб-платформы также:
Blob,Event,ImageData,KeyRange,NodeиWindow.
Преобразование коллекций с помощью JsObject.jsify()
Чтобы создать коллекцию JavaScript из коллекции Dart, используйте конструктор JsObject.jsify, который преобразует Map и Iterable из Dart в объекты и массивы JavaScript.
Следующее выражение создаёт новый объект JavaScript с заданными свойствами a и b:
var jsMap = JsObject.jsify({'a': 1, 'b': 2}); Это выражение создаёт массив JavaScript:
var jsArray = JsObject.jsify([1, 2, 3]);
Классы
- JsArray<
E> - List, представляющий прокси массива JavaScript.
- JsFunction
- Прокси объекта Function в JavaScript.
- JsObject
- Прокси объекта JavaScript.
Свойства
- context → JsObject только для чтения
- Глобальный объект JavaScript, обычно
window.
Функции
- allowInterop<
F extends Function>( F f) → F - Возвращает обёртку для функции
f, которую можно вызвать из JavaScript с помощью взаимодействия с JavaScript черезpackage:js. - allowInteropCaptureThis(
Function f) → Function - Возвращает обёртку для функции
f, которую можно вызвать из JavaScript с помощью взаимодействия с JavaScript черезpackage:js, передав JavaScriptthisпервым аргументом.
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-js/dart-js-library.html