2016-09-15 86 views
0

我有一個HTML文件,我複製粘貼emscripten生成的代碼到它的<script></script>區域
的瀏覽器中運行的emscripten代碼之前所有的HTML文件已被處理
因此,如果emscripten代碼使用一個HTML元素是在<script></script>區域之後,它不會工作
here它說C main()函數在頁面完全加載後調用,但這是錯誤的
如何讓C代碼運行後該html文件是完全加載?emscripten的window.onload相當於

回答

2

這個page是一個使用Emscripten編譯爲JavaScript並在您自己的頁面中包含JavaScript的教程式指南。它包括在HTML文檔上單擊按鈕之前不運行C程序。

總之,通常,而不是複製和粘貼Emscripten生成的代碼,它是比較容易通過運行JavaScript來加載Emscripten的JavaScript在一個單獨的請求,例如,在主文檔中:

 var script = document.createElement('script'); 
     script.src = "my_emscripten_script.js"; 
     document.body.appendChild(script); 

在Emscripten你不需要有一個main功能可言,該教程我鏈接到重命名main功能mainf,如果導出它通過將命令行標誌

 -s EXPORTED_FUNCTIONS='["_mainf"]' 

emcc在編譯時(注意引導下劃線!),然後當你想啓動你的C程序時你可以從JavaScript調用它。你如何從JavaScript調用的導出函數描述here,但對於改名mainf功能將是一個JavaScript調用是這樣的:

Module.ccall('mainf', null, null); 

如果你想確保這不叫,直到Emscripten運行 - 時間已經準備好,Emscripten使用的Module對象可以添加一個onRuntimeInitialized方法。當Emscripten準備就緒時,這個函數被調用,所以你可以用它來調用ccall來啓動程序。

話雖如此,我很驚訝您的main函數正在文檔準備就緒之前運行。請注意,html5.h中的一些emscripten函數(例如用於請求畫布的功能全屏顯示)僅在用戶啓動的事件(出於安全原因)時纔有效,因此可能是您的問題而不是調用頁面加載main期間的什麼點。