2013-12-23 41 views
3

我想在Firefox(v22.0)中運行我的Dart應用程序。下面是應用程序的主頁:刪除鏈接到Dart文件殺死應用程序

<!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)飛鏢是否有推薦的<DOCTYPE>聲明,如過渡等?

在此先感謝!

回答

1

1)Firefox不關心Dart源代碼文件,但是pub構建。 如果您的HTML文件不包含Dart腳本pub build可以複製該文件而不進行任何處理 否則pub build添加JavaScript代碼,在瀏覽器不支持Dart的情況下,執行代替Dart腳本。 2)您的文檔類型是正確的HTML5文檔類型,Dart可以正常使用。

+0

謝謝@Gunter Zochbauer(+1) - 唯一的是,如果我將第一個'

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個腳本標記不存在任何推薦。
+0

謝謝@Alexandre Ardhuin(+1) - 請看我的後續問題Gunter的答案 - 我對你有同樣的問題! – IAmYourFaja

4

簡短回答:查看dart.js,瞭解發生了什麼事。 Dart.js會查找腳本:application/dart,如果它運行在帶有DartVM(即Dartium)的瀏覽器上,它將啓動該腳本。否則,它將採用腳本文件myapp.dart並將文件更改爲myapp.dart.js並運行該文件。通過刪除該腳本標記,您將刪除dart.js查找的dart腳本,並且因此您的javascript編譯版本從未插入到您的文檔中。

關於DOCTYPE沒有特別推薦,但是由於Dart通常是爲最新版本的瀏覽器設計的,實際上在適當的情況下使用HTML5標籤,所以最好使用HTML5 DOCTYPE。

+0

謝謝@Matt B(+1) - 請看Gunter的回答下我的後續問題 - 我對你有同樣的問題! – IAmYourFaja

+0

根據Günter的迴應,這是正常的,此時應用程序的.dart版本不會被複制到構建版本。最終它會是,但暫時你必須忍受404錯誤。或者,您可以將原始源代碼複製到構建目錄中,或手動運行dart2dart(dart2js --output-type = dart)以創建dart腳本的縮小版本。你不能刪除應用程序/ dart腳本行(甚至是從index.html的內置版本),因爲dart.js期望這行。請參閱:http://dartbug.com/15623 –

3

1)看看packages/browser/dart.js的功能。

它首先檢查瀏覽器是否支持Dart,如果瀏覽器不支持Dart,它將查找類型爲application/dart的文件,並將它們重新映射爲指向正確的JavaScript文件。

由於您刪除了您的Dart腳本,dart.js未找到它並且從不重映射它以指向JavaScript文件。

2)我見過的所有東西都使用HTML5文檔類型:<!DOCTYPE html>但我不認爲有官方指南。

+0

謝謝@Pixel Elephant(+1) - 請看Gunter的回答下我的後續問題 - 我對你有同樣的問題! – IAmYourFaja