删除Dart文件的链接会导致应用程序崩溃

时间:2013-12-23 15:50:48

标签: firefox dart doctype script-tag dart2js

我正在尝试在Firefox中运行我的Dart应用程序(v22.0)。这是应用程序的主页:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>My 1st Dart App</title>
        <link rel="stylesheet" href="assets/myapp/myapp/myapp.css">
    </head>
    <body>
        <h2>Push the button!</h2>

        <div id="sample_container_id">
            <input type="button" id="someButton" value="Some Button!" />
        </div>

        <script type="application/dart" src="myapp.dart"></script>
        <script src="packages/browser/dart.js"></script>
    </body>
</html>

当我按原样运行时,我的应用程序运行正常,并且完全符合我的要求。但是如果我删除第一个<script/>标记(<script type="application/dart" src="myapp.dart"></script>),则Dart代码都不会在运行时执行。例如,我在HTML按钮上配置了一个点击处理程序,如下所示:

void main() {
    querySelector("#someButton").onClick.listen((e) => window.alert("Hello!"));
}

如果我删除了第一个<script/>标记,那么当我点击someButton时没有任何反应。

(1)为什么删除第一个<script/>标记“杀死”Dart代码?我正在使用pub build来生成交叉编译的JavaScript,那么为什么要使用Firefox关心我的Dart源文件(因为FF 22.0本身不支持Dart)?

(2)Dart是否有推荐的<DOCTYPE>声明,例如过渡等?

4 个答案:

答案 0 :(得分:4)

简短回答:查看dart.js以了解发生了什么。

答案很长:Dart.js将查找脚本:application / dart,如果它在带有DartVM的浏览器上运行(即:Dartium),它将启动它。否则,它将采用脚本文件myapp.dart并将文件更改为myapp.dart.js并运行该文件。通过删除该脚本标记,您将删除dart.js查找的dart脚本,因此您的javascript编译版本永远不会插入到您的文档中。

关于DOCTYPE没有特别推荐,但是因为Dart通常是为最新版本的浏览器而设计的,并且实际上在适当的地方使用HTML5标签,所以最好使用HTML5 DOCTYPE,就像在你的例子中一样。

答案 1 :(得分:3)

1)看一下package / browser / dart.js的作用。

首先检查浏览器是否支持Dart,然后如果浏览器不支持Dart,它会查找类型为application/dart的文件并重新映射它们以指向正确的JavaScript文件。

由于您删除了Dart脚本,因此dart.js找不到它,并且从未将其重新映射为指向JavaScript文件。

2)我见过的所有内容都使用HTML5文档类型:<!DOCTYPE html>但我认为没有官方指南。

答案 2 :(得分:2)

  1. packages/browser/dart.js检查 DartVM 是否可用,如果不可用,则将<script type="application/dart" src="xxx.dart"></script>替换为<script src="xxx.dart.js"></script>。假设您已经运行 dart2js ,您可以通过仅用<script src="myapp.dart.js"></script>
  2. 替换2个脚本标记来手动执行该作业
  3. 没有推荐。

答案 3 :(得分:1)

1)Firefox并不关心Dart源文件,而是pub构建。 如果您的HTML文件不包含Dart脚本pub build,则无需任何处理即可复制该文件 否则pub build会添加代码而不是Dart脚本执行的JavaScript代码 支持Dart。

2)您的doctype是正确的HTML5文档类型,Dart可以正常使用它。