我正在尝试在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>
声明,例如过渡等?
答案 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)
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>
答案 3 :(得分:1)
1)Firefox并不关心Dart源文件,而是pub构建。
如果您的HTML文件不包含Dart脚本pub build
,则无需任何处理即可复制该文件
否则pub build
会添加代码而不是Dart脚本执行的JavaScript代码
支持Dart。
2)您的doctype是正确的HTML5文档类型,Dart可以正常使用它。