Dart:在隔离中使用JsObject和窗口API

时间:2017-03-22 10:14:55

标签: dart dart-js-interop dart-isolates

我在Dart中使用分离株时遇到了一些困难。第一个问题是我想使用dart:js在我的一个隔离区中使用javascript库。我尝试使用以下代码:

void runCode(SendPort sendPort)
{
    print("still ok...");
    JsObject object = new JsObject(context['jsCode']);
    print("still ok?");
}

void main()
{
    ReceivePort receivePort = new ReceivePort();
    JsObject object = new JsObject(context['jsCode']);
    print("ok so far");
    Isolate.spawn(runCode, receivePort.sendPort);
}

代码在runCode函数中运行到“仍然正常......”,并在我尝试使用JsObject时中断。

第二个问题是我想在隔离中使用fileSystem API。所以我尝试了以下内容:

void runCode(SendPort sendPort)
{
    window.requestFileSystem.then((FileSystem filesytem) => print('ok'));
}

void main()
{
    ReceivePort receivePort = new ReceivePort();
    Isolate.spawn(runCode, receivePort.sendPort);
}

当我到达文件系统时,第二个示例会中断。

我已阅读:Dart : Isolate not working when using html import并且从这里建议dart:html不能用于隔离。这就是文件系统API不起作用的原因吗?对于dart:js,情况是否相同?或者我完全错过了什么?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我已经读过只有主线程可以访问DOM的地方,如果不在主线程中,这将导致任何其他JS操作失败。