2015-03-31 216 views
0

我有一個應用程序啓動一個小程序。當我嘗試在Chrome瀏覽器中登錄按鈕點擊我收到以下錯誤未捕獲類型錯誤:undefined不是函數Chrome不工作

applet.htm:54 Uncaught TypeError: undefined is not a function 
engine.js:1262 console.trace() 
engine.js:1262 dwr.engine._debug 
engine.js:1263 Error: TypeError, undefined is not a function 

代碼applet.htm線54(遺漏的類型錯誤:未定義是不是一個函數):

function initApplet() { 
    while(ctiApplet.isActive()==false) { 

    } 

線1257 - 1281的engine.js

/** @private Used internally when some message needs to get to the  programmer */ 
dwr.engine._debug = function(message, stacktrace) { 
    var written = false; 
    try { 
    if (window.console) { 
     if (stacktrace && window.console.trace) window.console.trace(); 
     window.console.log(message); 
     written = true; 
    } 
    else if (window.opera && window.opera.postError) { 
     window.opera.postError(message); 
     written = true; 
    } 
    } 
    catch (ex) { /* ignore */ } 

    if (!written) { 
    var debug = document.getElementById("dwr-debug"); 
    if (debug) { 
     var contents = message + "<br/>" + debug.innerHTML; 
     if (contents.length > 2048) contents = contents.substring(0, 2048); 
     debug.innerHTML = contents; 
    } 
    } 
}; 

真的不明白爲什麼它是未定義的。就像它無法抓住小程序,所以沒有意識到它的加載。適用於IE8。如果任何人都可以闡明它的話。

回答

1

Call Applet.getMethod() with javascript throws error msg : TypeError: Applet.getMethod() is not a function有類似的問題和答案,即關於Firefox,但問題是相同的:頁面完成可能發生在小程序初始化之前。

第一方案是小程序初始化階段之前就乾脆把延遲:

$(document).ready(function() { 
    console.log("document ready"); 
    setTimeout(function() { 
     console.log("calling openSession..."); 
     document.myApplet.openSession(); 
    }, 2000); 
}); 

但你不能總是肯定的是,延遲足夠。一個更復雜的解決方案可能是最多多次(例如20次)引發init方法,直到它不能被訪問(即不是「未定義」),在重試之前等待一段時間(例如125毫秒) 。

+0

謝謝,是的,這似乎是最好的解決方案。有時它有效,有時我會得到上述錯誤,所以延遲是最好的。 – topcat3 2015-04-14 10:18:54

相關問題