IE7の断続的なランタイムエラー:行0で発生、オブジェクトが必要ですか?え?
-
22-07-2019 - |
質問
作業中のサイトは、IE7および8でのみ断続的なランタイムエラーを表示します。このエラーは、ほぼランダムに表示されます(たとえば、最初のページの読み込み時にポップアップするか、負荷)。このエラーは、行0で発生したことを示しており、エラーは「Object required」です。私はサイト全体でjQueryを使用していますが、それを少しずつ(つまり、さまざまなプラグインなど)無効にしても問題は解決しませんでした。私はまだそれに力を入れていますが、この「ヘルプ!」誰かが以前にこのようなものに対処したことがある場合に備えて、stackoverflowに出てください。
それの断続性は、本当に私のお尻を叩くものです。
解決
あなたの答えから、「header-section」のidを持つ要素はページの上部にあり、場合によっては、ページの残りの部分がロードされる前にcssルールが適用されていると思います。つまり、式は、その要素が存在する前に 'content-section'のoffsetHeightを評価しようとします。
これに対処する方法についていくつかの提案がありますが、それらの有用性を評価するには、それらを試してみる必要があります。
1 /「header-section」のIDに基づいてルールを作成する代わりに、「header-section」クラスに基づいてルールを作成します。このクラスをマークアップに追加するのではなく、jqueryを介してドキュメントの読み込みが完了したら追加します-要素のIDはそのままにします...
$(document).ready(function(){
$("#header-section").addClass("header-section");
});
2 / 'content-section'が見つからないことに対するルールをより寛容にします-cssルールで式を使用する必要性を感じたことがないため、式が評価される頻度がわからないため、これは機能しない可能性があります。
#header-section {margin-top: expression((0 - (this.offsetHeight + (document.getElementById("content-section") ? document.getElementById("content-section").offsetHeight : 0))) + "px");}
どのように乗るのか教えてください。
PS私はルールが何を達成しようとしているのか分かりません-同じレイアウトであると仮定してページをモックアップしましたが、それはすべてのコンテンツをページの上部から移動させ、見られないように。
他のヒント
DOMが完全に作成される前に、スクリプトがオブジェクトにアクセスしようとしているようです。関数がjQuery ready関数内にあることを確認しましたか?
$(document).ready(function() {
// put all your jQuery goodness in here.
});
わかりました。 IEのみのcssファイルで使用されている2つの式があります。次に例を示します。
#header-section {margin-top: expression((0 - (this.offsetHeight + document.getElementById("content-section").offsetHeight)) + "px");}
これらの式を使用する両方のインスタンスをコメントアウトすると、問題が解決します。なぜこれが正確に起こるのかはわかりません(これを行うCSSを書いていなかったので、そのCSSファイルを調べることすら知りませんでした)。
他のJSがまだロードされていない場所で少なくとも2つの場所が使用されていたため、他のJSと競合することはありません。まだエラーが発生しています。おそらく、何らかの理由でID(コンテンツセクションまたはヘッダーセクション)が見つかりませんでしたか?確かなことではありません...特に振る舞いが一貫していないためです。うーん...
ソリューションbelugabobに感謝します
0行目に必要なオブジェクトで同じエラーが発生しました。 ieスタイルシートのcssの式...?...:0の修正は仕事をしました。
この種のコードが使用される理由は、ナビゲーション/ヘッダーを上に移動するため、SEO関連です。コンテンツを一番上に置き、その下にはあまり重要でないSE賢明なナビゲーションが必要です。