dart:js library

与JavaScript互操作的底层支持.

您通常应该使用package:js而不是此库. 有关更多信息,请参见JS互操作页面 .

该库提供了从Dart访问JavaScript对象的权限,从而允许Dart代码获取和设置属性,以及调用JavaScript对象的方法和调用JavaScript函数. 该库负责在Dart和JavaScript对象之间进行转换,或者在无法进行转换的情况下提供代理.

尽管该库允许将Dart函数传递到JavaScript中或从JavaScript调用,但该库无法使Dart对象可用于JavaScript,也无法访问其方法和属性.

JsObject是核心类型,代表JavaScript对象的代理. JsObject允许访问基础JavaScript对象的属性和方法. JsObject可以通过调用JavaScript来获取,也可以从代理到JavaScript构造函数的方式创建.

顶级的getter 上下文提供了一个JsObject ,它表示JavaScript中的全局对象,通常是window .

以下示例显示了通过JavaScript调用全局函数alert()的警报对话框:

import 'dart:js';

main() => context.callMethod('alert', ['Hello from Dart!']);

此示例显示如何从JavaScript构造函数创建JsObject并访问其属性:

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]);
}

Proxying and automatic conversion

当在JsObject上设置属性或将参数传递给Javascript方法或函数时,Dart对象将自动转换或代理为JavaScript对象. 访问JavaScript属性时,或从JavaScript调用Dart闭包时,JavaScript对象也将转换为Dart.

函数和闭包以可调用的方式代理. 分配给JavaScript属性的Dart闭包由JavaScript中的函数代理. 从Dart访问的JavaScript函数由JsFunction代理,该函数具有JsFunction.apply方法来调用它.

以下类型直接传输而不是代理传输:

  • 基本类型: nullboolnumStringDateTime
  • TypedData ,包括其子类(如Int32List ,但不包括 ByteBuffer
  • 当为网络编译时,还: BlobEventImageDataKeyRangeNodeWindow .

Converting collections with JsObject.jsify()

要从Dart集合创建JavaScript集合,请使用JsObject.jsify构造函数,该构造函数将Dart MapIterable转换为JavaScript对象和数组.

以下表达式使用定义的属性ab创建一个新的JavaScript对象:

var jsMap = JsObject.jsify({'a': 1, 'b': 2});

此表达式创建一个JavaScript数组:

var jsArray = JsObject.jsify([1, 2, 3]);

Classes

JsArray<E>
代理JavaScript数组的列表 .
JsFunction
JavaScript Function对象上的代理.
JsObject
JavaScript对象上的代理. [...]

Properties

context JsObject
JavaScript全局对象,通常是window .
只读

Functions

allowInterop<F extends Function>(F f) → F
返回函数f的包装,可以使用package:js JavaScript interop从JavaScript调用该package:js . [...]
allowInteropCaptureThis(Function f) Function
返回围绕功能的包装f可以从使用JavaScript调用package:js的JavaScript互操作,通过JavaScript的this作为第一个参数. [...]