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