web-dev-qa-db-ja.com

window.onload()は、最初のショットでIE 8で起動しません

IE 8でページを正常に動作させようとしています。ここで見つけました: http://www.masykur.web.id/post/How-to- Make-Our-Website-to-be-be-Ready-for-IE8.aspx 私のページはXHTML 1.0に準拠し、少なくともCSS 2.1に準拠している必要がありますwindow.onload()が起動していません。誰かこの問題に遭遇しましたか?

コードスニペットは次のとおりです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=8"/>
        <title>Testing</title>
        <link rel="stylesheet" href="test.css" type="text/css"></link>
        <script type="text/javascript" src="login.js"></script>
        <script type="text/javascript" src="common.js"></script>
        <script type="text/javascript">
            window.onload = function()
            {
                          // Not coming here at all on first shot   
            }
        </script>
    </head>
    <body>
     .
     .
     .

ただし、ページを更新すると動作するようです。

ここに何かが足りませんか?

UPDATE:

IEアドオンが正常に動作を無効にした後、この問題を作成しました。時間と回答をありがとう:)

26
Manohar

IE try:

window.onload = new function() { alert('hello');};
28
George

これはかなり古いスレッドですが、私は他の人を助けるかもしれない解決策を見つけました。

動的に挿入されたスクリプトを介してwindow.onloadに関数を追加していました(このコンテキストでは重要ではない理由で外部スクリプトの負荷を真に模倣するためです)。この投稿で述べたように、IE8内の最初のロードでは、window.onloadは起動しませんが、その後の呼び出しはすべて起動します。

これを内部スクリプトとしてHTMLファイルに入れると、常に機能することがわかりました。

var windowOnload = window.onload || function() {};
window.onload = function() { windowOnload(); };

上記のコードはすべて、IE8のwindow.onloadを控えめに「初期化」します。 IE8は、onloadイベントがまだウィンドウにアタッチされていないため(または技術用語でtypeofが未定義)、外部スクリプトから呼び出された場合、window.onloadのトリガーに失敗すると思われます。 IE8が初めてやることは、onloadを適切に実行せずにウィンドウにアタッチすることです。

上記のコードは非常に明白になります。IE8にonloadイベントを認識させるだけです。何が実行されるか、何が実行されないかは気にしないので、既に定義されている既存のwindow.onloadコードを介してパイプするだけです(念のため)。

これをHTMLの内部スクリプトとして使用することが重要です(少なくとも私のテストでは)。

したがって、HTMLは次のようになります(関連部分)。

 <script type="text/javascript">
  var windowOnload=window.onload||function(){};window.onload=function(){windowOnload();};
 </script>
 <script type="text/javascript" src="script.js">
 </script>

テストから、キャッシュをクリアし、ページをリロードした後、window.onloadを取得して毎回正常にトリガーしました。

これがお役に立てば幸いです。

9
Milan Adamovsky

JavaScriptでエラーが発生する可能性があります。その場合、その後のJavaScriptは正しく機能しません。

Login.jsおよびcommon.jsへの参照を削除し、問題のある関数内でアラートを試行してください。

3
Ólafur Waage

私は個人的にテストするIE8を持っていませんが、このテストは何をしますか?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Test IE 8</title>
<script type="text/javascript">
/* <![CDATA[ */
window.onload = function(){alert('Good morning!');}
/* ]]> */
</script>
</head>
<body>
<h1>Hello</h1>
<body>
</html>

このテストが期待どおりに機能する場合は、内部JavaScriptブロックの周りでCDATAビットを試してください。

そして、それが期待どおりに機能しない場合は、おそらくその上の外部JavaScriptに、onloadの起動を妨げる何かがあります。前のポスターでこれが言及されました。その時点で、エラーコンソールまたはデバッガを試して、道を示します。

3
Fran Corpier

onloadは、すべてのコンテンツ(外部画像などを含む)が読み込まれた後に発生します。これらのリソースは、最初に(キャッシュされる前に)ロードするのに長い時間がかかる可能性があります。別の可能性は、スクリプトの停止と同様にIEにのみ影響するコードのエラーです(ただし、初回のみが奇数です)。

1
SpliFF

次のコードは私のために機能します。 Firefoxでページをロードすると、アラートがすぐに表示されます。 IE 8でページを最初にロードすると、アクティブなコンテンツについて警告が表示されます。ブロックされたコンテンツを許可すると、確認を求められます。別のコンピューターでIE 8を試すか、ページ内のコードを削除してエラーをチェックします。バイナリ検索を実行できます。ページの前半をコメントアウトしてアラートが表示されるかどうかを確認し、まだ表示されない場合は、前半のコメントを外し、後半をコメントアウトします。問題のあるコードに絞り込むまで、必要に応じて繰り返します。 HTMLは正常に機能し、実際にはいくつかの利点があります。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
  <head>
    <meta http-equiv="X-UA-Compatible" content="IE=8"/>
    <title></title>
    <style type="text/css">
    </style>
    <script type="text/javascript">
    window.onload=function() { alert('hello');};
    </script>
  </head>
  <body>
  </body>
</html>

古い質問ですが、私は同じ問題を抱えていましたが、別の問題であることが判明しました。私の問題は、<script type="application/javascript">が理解できない、または実行しようとする<IE9を実行したことです。古いブラウザで機能するには、技術的には正しいタイプではありませんが、text/javascriptを使用する必要があります...

0
OZZIE

Apacheと別のWebサーバー(IIS?)を使用して異なる結果を取得し、IE8を使用して最終結果を比較する場合、送信されるコンテンツタイプヘッダーに違いがなければなりません。プラットフォームのwgetユーティリティを入手し、生成されるヘッダーを確認します。 Windowsを使用している場合は、 GUI wgetのポータブルアプリバージョン はかなりいいです。

0
Tony Miller

私はこれがちょっと古い質問であることを知っていますが、私はちょうど同じことに直面しました。

 window.onload=function() { alert('hello');};

とは異なる方法で処理されます

 window.onload= new function() { alert('hello');};

ここのキーワードはnewです。

「関数」の前に「新しい」という単語を追加するまで、JSは(onload =)部分に達するたびに終了していました。 localhostで「新規」がなくても正常に機能していましたが、一度オンラインにすると、「新規」を追加するまで機能しません。

0
Mohammed Joraid