我刚刚验证了我的javascript代码在IE以外的所有浏览器中都能正常运行。如何在Chrome,Safari中正确读取和执行脚本...但IE发现一些莫名其妙的错误并拒绝运行代码?
$(document).ready(function() {
var NewsNavigator = {
init: function(config) {
this.news = config.news;
this.newsNum = this.news.length;
this.navbuttons = config.navbuttons;
this.prevButton = config.prevButton;
this.nextButton = config.nextButton;
this.displayatonce = config.displayatonce;
this.maxSteps = Math.ceil(this.newsNum / this.displayatonce);
this.counter = 0;
this.navigateNews();
this.enableNav();
this.checkButtonsVisibility();
},
showNews: function() {
var start = this.counter * this.displayatonce;
var end = this.counter * this.displayatonce + (this.displayatonce - 1);
for (i=start; i<=end; i++) {
this.news.eq(i).show();
}
},
hideAllNews: function() {
console.log("hiding news");
this.news.hide();
},
navigateNews: function() {
this.hideAllNews();
this.showNews();
},
checkButtonsVisibility: function() {
if (this.counter <= 0)
{
this.prevButton.css('visibility', 'hidden');
}
else
{
this.prevButton.css('visibility', 'visible');
}
if (this.counter >= this.maxSteps - 1)
{
this.nextButton.css('visibility', 'hidden');
}
else
{
this.nextButton.css('visibility', 'visible');
}
},
enableNav: function() {
self = this;
this.navbuttons.on('click', function(event) {
if (($(this).data('dir') === 'prev') && (self.counter > 0)) {
self.counter--;
self.navigateNews();
} else if (($(this).data('dir') === 'next') && (self.counter < self.maxSteps - 1)) {
self.counter++;
self.navigateNews();
}
self.checkButtonsVisibility();
event.preventDefault();
});
}
};
NewsNavigator.init({
news: $('div#cat-news').find('div.oneCol'),
displayatonce: 3,
navbuttons: $('div#nav').find('a'),
prevButton: $('div#nav a.prec'),
nextButton: $('div#nav a.succ')
});
});
IE9中的错误消息
SCRIPT438: The object doesn't support the 'checkButtonsVisibility' property or method.
NewsNavigator.js, Row 69 Character 5
答案 0 :(得分:3)
这归结为JavaScript的历史。
JavaScript是基于ECMAScript实现的:
http://en.wikipedia.org/wiki/ECMAScript
每个单独的Web浏览器提供商(Mozilla,Google,Microsoft)都认为他们不想标准化JavaScript,他们每个人都想出了自己的ECMAScript实现,因此他们自己的JavaScript引擎。
因此,我们程序员在尝试编写兼容所有这些不同JavaScript引擎的JavaScript时会头疼,因为他们每个人都以自己的方式阅读JavaScript(这解决了为什么IE发现一些莫名其妙的错误而其他人没有问题的问题)吨)
有趣的事实:只有Mozilla的ECMAScript实现实际上称为“JavaScript”。您应该查找如何编写跨不同JavaScript引擎交叉兼容的JavaScript。
答案 1 :(得分:2)
使用javascript验证工具,例如JSLint,以确保最大程度的兼容性。这样,因为单个省略的字符(例如;
,'
等)可能导致您的脚本无法在特定浏览器中运行。
JSLint还将提供有关如何提供和不提供更多兼容性的不同提示。