使用Dart动态加载Dart脚本

9

我正在尝试使用Dart动态加载Dart脚本。我正在使用类似于以下内容的代码:

test.html:

...
<script src="http://dart.googlecode.com/svn/branches/bleeding_edge/dart/client/dart.js"></script>
<script type="application/dart" src="test.dart"></script>
...

test.dart:

#import('dart:html');
main() {
    var script = new ScriptElement();
    script.type = 'application/dart';
    script.src = 'helloworld.dart';
    document.body.elements.add(script);
}

它不起作用。但是,如果我将相同的代码内联到HTML文件中,它就可以正常工作:

test.html:

...
<script src="http://dart.googlecode.com/svn/branches/bleeding_edge/dart/client/dart.js"></script>
<script type="application/dart">
#import('dart:html');
main() {
    var script = new ScriptElement();
    script.type = 'application/dart';
    script.src = 'helloworld.dart';
    document.body.elements.add(script);
}
</script>
...

为什么会发生这种情况?

看起来像是一个 bug。也许你应该在 dartbug 上添加一个问题。 - Nicolas François
我同意。目前Dart不应该通过ScriptElement()进行加载(这是为了加载JavaScript,即使在这种情况下,相互通信也非常不确定)。目前加载Dart代码的主要方式是使用Isolate.spawnURI()。 - Matt B
@MattB:我看到能够内联Dart代码:http://www.dartlang.org/articles/embedding-in-html/,而且它可以运行! - Manuel Ceron
是的,嵌入Dart代码是可能的。只是ScriptElement并不是为了与Dart代码一起使用而设计的,它只能用于JavaScript。即使如此,它也没有被设计为共享已加载的代码的访问权限。 - Matt B
3个回答

0
你是在Dartium(作为Dart)中运行还是在其他浏览器(作为JavaScript)中运行?我假设是后者。如果你查看(http://dart.googlecode.com/svn/branches/bleeding_edge/dart/client/dart.js),它会寻找像foo.dart这样的脚本标签,并自动加载foo.dart.js。它在window.addEventListener("DOMContentLoaded", function (e) {...})回调中执行。该回调发生在动态添加脚本标签的代码之前。
因此,你可以在你的代码中加载helloworld.dart.js,这正是(http://dart.googlecode.com/svn/branches/bleeding_edge/dart/client/dart.js)将要做的。然而,请注意,Dart理想情况下会尝试将每个脚本标签视为单独的隔离--这不像JavaScript。

0

0

这是Dart的一个bug。这里是bug报告的链接。


似乎隔离是动态加载Dart代码的唯一支持方式。 - beatgammit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接