2017-09-27 1 views
0

Imは、以下の構造を持つHTMLアプリケーションを開発:Foundationグローバルは時には定義されていないのはなぜですか?

<html> 
<head> 
    <!-- other head elements --> 
    <script src="jquery.js?_v=3736f12"></script> 
    <script src="error.js?_v=291bb66"></script> 
</head> 

<body> 
    <!-- other body elements --> 
    <script src="foundation.js?_v=880a16f"></script> 
    <script src="my_lib.js?_v=1c3b21e"></script> 
</body> 
</html> 

error.jsは、それがwindow.onerrorイベントをリッスンし、それがトリガされたとき、それは私たちの開発者に通知するために、サーバーにAJAXを経由して、エラーメッセージを送ることです。このようにして、ユーザーのjavascriptがいつ何かについて苦情を受け取るとわかります。

my_lib.jsは、非常に大きなライブラリであり、多くのタスクを行います。また、HTML構造のmy_lib.jsの直前に含まれるFoundationフレームワークとそのjavascriptライブラリで構築されることがよくあります。

今私は私の質問に行くことができます。これらの日は、私たちはものと同様のエラーを取得している:

  • はTypeError:未定義
  • 捕捉されない例外TypeErrorを( 'window.Foundation.Abide' を評価)オブジェクトではありません:window.Foundationは未定義
  • はTypeErrorがあることはできません(コードFoundation.Dropdown中)未定義のプロパティ「ドロップダウンを」

を読んで、これらのエラーは通常、排他的ではないが、多くの場合、モバイルデバイスから、財団法人地球Foundation my_lib.js内側と様々いるUserAgentからの使用から来ます。エラーのタイミングは、通常、準備完了イベントの前、または準備完了イベントと負荷イベントの間のタイミングです。狂ったことは、それらのエラーが同じユーザーから常に来るというわけではなく(同じページで2回であっても)、時には時々来るため、私たちは単一のものを再現できませんでした。

私たちは決してFoundationを明示的に未定義に設定していないと確信しています。それがあれば、それはすべてのブロワーの負荷問題になります。

これは、foundation.jsがmy_lib.jsを評価する前に常に評価されるかどうかを疑問視しました。私がここで記事を読んでから、私はタグが順番に評価され、お互いを待っていることを理解しています(私たちは非同期または遅延を使用しません)。

サーバログから取得できるもう一つの手がかりは、ユーザがしばらくしばらくしてから私たちのサイトに入る/リロードしたときに発生するということです。たとえば、ログインしている間にログインした後、または更新していない状態で長時間活動していない場合。

誰もがこのhapenningをなぜ知っていますか?

ありがとうございます。

+0

iは、ライブラリは、より良い – madalinivascu

+0

をロードされたすべてのレンダリングは、私がスクリプト要素にdefer' '属性を与えるためにあなたをお勧めします – madalinivascu

+0

完了したときに、すべてのプラグインを開始する前に、プラグインが開始されていると思います。 JSをダウンロードしてHTML(ページの読み込み速度を上げることができる)を解析し、ドキュメントに表示されている順序でスクリプトを実行するようにします。ところで、なぜあなたは、foundationやmy_libのように、ドキュメントの最後に 'script'を置かないのですか? – debute

答えて

0

古典的な競合状態のように聞こえますが、コードが実行されるときにライブラリが読み込まれたり読み込まれたりすることはありません。

ライブラリに依存するコードを実行する前にこれを避けるには、たとえばこのイベントがトリガされていることを確認してください。

(document.readyState === 'complete') { 
    // good to go! 
} 
+0

だから、別のjsファイルで2つのスクリプトタグがあると、2つ目のスクリプトタグが実行を開始したときに、最初のものが準備できているとは保証されません。 – Walkerr47

+0

厳密に言えば、このスクリプトタグは、非同期タグやシンプルなタグを与えない限り、順番に読み込まれます。それでも、ユーザーの接続やその他の要因によっては信頼性があまり高くありません。あなたはあなたの図書館で何が起こっているのか分かりません。そのため、document.readyStateを待つほうが安全です –

関連する問題