Библиотека dart:js
Базовая поддержка взаимодействия с JavaScript.
Обычно следует использовать package:js вместо этой библиотеки. Дополнительную информацию см. на странице JS interop.
Эта библиотека предоставляет доступ к объектам JavaScript из Dart, позволяя коду Dart получать и устанавливать свойства, вызывать методы объектов JavaScript и вызывать JavaScript-функции. Библиотека позаботится о преобразовании между объектами Dart и JavaScript, где это возможно, или предоставит прокси, если преобразование невозможно.
Эта библиотека не делает объекты Dart доступными из JavaScript, их методы и свойства недоступны, хотя она позволяет передавать и вызывать Dart-функции из JavaScript.
JsObject — это основной тип и представляет собой прокси объекта JavaScript. JsObject предоставляет доступ к свойствам и методам базовых JavaScript-объектов. JsObject могут быть получены вызовами JavaScript, или они могут быть созданы из прокси к JavaScript-конструкторам.
Глобальный getter context предоставляет JsObject, представляющий глобальный объект в JavaScript, обычно window.
Следующий пример демонстрирует диалоговое окно alert с помощью вызова 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, который преобразует Dart Mapы и Iterableы в JavaScript-объекты и массивы.
Следующее выражение создаёт новый JavaScript-объект со свойствами a и b:
var jsMap = JsObject.jsify({'a': 1, 'b': 2}); Это выражение создаёт JavaScript-массив:
var jsArray = JsObject.jsify([1, 2, 3]);
Классы
- JsArray<
E> - Список, который проксирует JavaScript-массив.
- JsFunction
- Прокси на JavaScript-объект Function.
- JsObject
- Прокси на JavaScript-объект.
Свойства
- context → JsObject только для чтения
- Глобальный JavaScript-объект, обычно
window.
Функции
- allowInterop<
F extends Function>( F f) → F - Возвращает оболочку вокруг функции
f, которая может быть вызвана из JavaScript с использованиемpackage:jsJavaScript interop. - allowInteropCaptureThis(
Function f) → Function - Возвращает оболочку вокруг функции
f, которая может быть вызвана из JavaScript с использованиемpackage:jsJavaScript interop, передавая JavaScriptthisв качестве первого аргумента.
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.18.5/dart-js/dart-js-library.html