2
我有這樣的功能:確定其中最大的調用堆棧大小被超過
function _cssIsLoaded(cssStylesheet, stylePath) {
var cssLoaded = 0;
if (cssStylesheet.href == stylePath){
try {
if (cssStylesheet.sheet && cssStylesheet.sheet.cssRules.length > 0)
cssLoaded = 1;
else if (cssStylesheet.styleSheet && cssStylesheet.styleSheet.cssText.length > 0)
cssLoaded = 1;
else if (cssStylesheet.innerHTML && cssStylesheet.innerHTML.length > 0)
cssLoaded = 1;
}
catch(ex){ }
}
if(cssLoaded) {
resetPops();
$('#video-overlay').show();
positionElements();
saveBizzmail();
} else {
setTimeout(this._cssIsLoaded(cssStylesheet), 200);
}
它是由一個樣式切換功能調用。有時,雖然運行該函數時我會得到錯誤Uncaught RangeError: Maximum call stack size exceeded,
。我認爲這一定是因爲它不斷循環,條件永遠不會被滿足?我只是不知道如何調試,並看看它會陷入困境的條件,因爲大多數時候它工作正常。我可以做相當於在該函數中設置斷點,但只有當調用堆棧超過特定大小時才能做到這一點。
這是切換樣式表的功能如果揭示一些光:
function switchTemplate(stylePath){
var osid = $('[id^="themeStyle-"]');
var stylenum = osid[0].id.split('-')[1];
var newstylenum = (Number(stylenum) + 1).toString();
var ns = $('<link>', {
href: stylePath,
id: 'themeStyle-' + newstylenum,
type: 'text/css',
rel: 'stylesheet'
});
$("head").append(ns);
$('#themeStyle-' + stylenum).remove();
_cssIsLoaded(ns.get(0), stylePath);
}
很有道理!我做了改變,但實際上我仍然有同樣的問題,所以還有其他一些問題。 – Damon
其他問題是我在第二次調用_cssIsLoaded時忘記了第二個參數。 – Damon