-1

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
4

2 に答える 2

3

これは JavaScript の歴史に帰着します。

JavaScript は ECMAScript に基づいて実装されました。

http://en.wikipedia.org/wiki/ECMAScript

すべての Web ブラウザー プロバイダー (Mozilla、Google、Microsoft) は、JavaScript を標準化しないことを決定し、ECMAScript の独自の実装、つまり独自の JavaScript エンジンを考え出しました。

したがって、私たちプログラマーは、これらすべての異なる JavaScript エンジン間で互換性のある JavaScript を作成しようとして頭痛の種になります。それぞれのエンジンが独自の方法で JavaScript を読み取るためです (これは、なぜ IE が不可解なエラーを検出し、残りは検出しないのかというあなたの疑問に答えます)。

豆知識: ECMAScript の Mozilla の実装だけが実際に「JavaScript」と呼ばれています。

異なる JavaScript エンジン間で相互互換性のある JavaScript を作成する方法を調べる必要があります。

于 2012-06-10T17:31:18.463 に答える
2

JSLintなどの JavaScript 検証ツールを使用して、最大限の互換性を確保します。これは、1 つの省略された文字 (、、;など') によってスクリプトが特定のブラウザーで実行されない可能性があるためです。

JSLint は、互換性をさらに高めるために何をすべきか、何をすべきでないかについてのさまざまなヒントも提供します。

于 2012-06-10T17:29:51.647 に答える