2013年12月14日 星期六

LimeJS : throwDeprecated.bind error

更新系統或是工具,基本上就是要擔一點風險。LimeJS 隔了一年再度使用,於是就將它更新為最新的版本。還沒有編譯之前,無論是在 iOS 或是 Android 上的瀏覽器都可以順利的執行用 LimeJS 開發的 HTML5 程式,不過,編譯完的 HTML5 程式,在 iOS 4.3 的 Safari 、Android 2.3 (2.2) 的 Mobile Chrome ,甚至 PC 中的 Firefox  3.6.x ,畫面都卡住不動。在 Firfox 及 iOS 的 Safari 中的 console 中看到了「throwDeprecated.bind is not a function」的錯誤訊息,Google 一下,在底下這個討論串中找到了解決的方法:


原來是 LimeJS source 中, node.js 的 Deprecated API 在作怪,先自己改一下原始碼,看看日後,LimeJS 官網是否會不會將這隻臭蟲除去,以免舊版的瀏覽器開不了 LimeJS 所開發的遊戲。
出問題的檔案在 LimeJS 目錄裡的「lime/source/node.js」,利用文字編輯程式打開該檔案後,找檔案最後面 Deprecated API 中的「 throwDeprecated.bind」

/**
 * Deprecated API
 */
function throwDeprecated(functionName) {
    throw new Error("Function " + functionName + " Deprecated");
}
lime.Node.prototype.getRelativeQuality = throwDeprecated.bind(null, "getRelativeQuality");
lime.Node.prototype.calcRelativeQuality = throwDeprecated.bind(null, "calcRelativeQuality");
lime.Node.prototype.setQuality = throwDeprecated.bind(null, "setQuality");
lime.Node.prototype.getQuality = throwDeprecated.bind(null, "getQuality");

將它們都改用「goog.bind」的語法,改為底下的內容:

/**
 * Deprecated API
 */
function throwDeprecated(functionName) {
    throw new Error("Function " + functionName + " Deprecated");
}
lime.Node.prototype.getRelativeQuality = goog.bind(throwDeprecated, null, "getRelativeQuality");
lime.Node.prototype.calcRelativeQuality = goog.bind(throwDeprecated, null, "calcRelativeQuality");
lime.Node.prototype.setQuality = goog.bind(throwDeprecated, null, "setQuality");
lime.Node.prototype.getQuality = goog.bind(throwDeprecated, null, "getQuality");

將修改好的 node.js 儲存好,重新再以 lime.py build 過的 HTML5 程式執行時就不會再出現「throwDeprecated.bind is not a function」而空白一片了。




沒有留言:

張貼留言

 
© 2009. Design by Pocket