1

みなさん、こんにちは。特定の順序でJavaScriptを読み込もうとしているという独特の状況があります。ブラウザは一度に複数のファイルでサーバーにJavaScriptを要求しているようです。私の問題は、Cookieを設定するものをロードする必要があり、次に2番目のものが必要です。これは、サードパーティのCookieが有効になっているかどうかを確認するためのものです。また、DOM要素の有無に応じて、DOM要素を非表示または表示します。具体的には、iFrameを非表示にして、サードパーティのCookieを有効にする必要があることを示すウィンドウを表示するか、クリックできるリンクを表示します。

コントローラーと2つのアクションを持つ.netMVCアプリがあります。アクション1はsetcookieと呼ばれ、cookieを設定するだけです。

2番目のアクションはValidateCookieと呼ばれ、Cookieが送信されたかどうかを確認し、trueまたはfalseを返す単純なJavascript関数を返します。ただし、問題は、ブラウザがsetcookieの前にValidateCookieを呼び出す場合があります。私はフィドラーを使用してこれを確認しました。ただし、常にそうとは限りません。通常、正しい順序で呼び出されます。たぶん10人に1人は後ろ向きです。

SetCookieを頭に入れて、本文の最後で検証してみました。本文の上部に設定し、最後に検証します。両方とも最後に、リンクタグを使用してsetcookieを呼び出し、imgタグを使用し、CSS@importを使用します。defer=noneを設定します。JavaScriptを正しい順序でロードすることができないようです。順序が正しくないため、Cookieの結果関数が有効になっている場合でもfalseを返す可能性があります。

最初のjavascriptが2番目のscriptタグをhtmlに動的に追加するメソッドを呼び出すソリューションをいくつか見つけました。すべてが続行する前にこれらの2つのJavaScriptをロードする必要があることを除いて、すべて順調です。また、動的に追加されたスクリプトタグは、他のすべてのスクリプトが実行された後に読み込まれます。

今ではすべてが同時に複数のファイルをロードすることであるため、おそらくそれも不可能です。

4

1 に答える 1

2

2番目のスクリプトが要求されたときに最初のスクリプトからCookieをサーバーに送信する唯一の方法は、最初のスクリプトがCookieを設定した後に2番目のスクリプトを手動でロードすることです。<script>タグ順に実行される場合でも、ブラウザはスクリプトをプリフェッチできるため、タグに依存してこれを行うことはできません<script>

したがって、イベントのシーケンスは次のようになります。

  1. 最初のスクリプトがロードされて実行されます。
  2. クッキーが設定されています。
  3. 2番目のスクリプトは動的にドキュメントに追加されます。

また、おそらくURLの末尾に一意の引数(通常は日時スタンプ)を追加して、2番目のスクリプトがキャッシュされていないことを確認する必要があります。

また、ページとスクリプトとCookieの両方がすべて共通ドメインにあり、Cookieが適切に設定されていることを確認して、すべてのCookieにアクセスできるようにする必要があります。

次に例を示します(firstscript.jsがCookieを設定し、secondscript.jsが要求されたときにサーバーに送信されます)。

<script src="firstscript.js"></script>
<script>
(function() {
    var dynScript = document.createElement("script");
    var now = new Date().getTime();
    dynScript.src = "secondscript.js?ts=" + now; 
    document.getElementsByTagName("head")[0].appendChild(dynScript);
})();
</script>
于 2013-03-04T22:59:05.733 に答える