按特定顺序加载(请求)javascript

按特定顺序加载(请求)javascript,javascript,Javascript,大家下午好,我有一个独特的情况,我正在尝试按特定顺序加载javascript。看起来浏览器一次通过多个文件从服务器请求javascript。我的问题是,我需要加载一个,它设置了一个cookie,然后我需要第二个cookie。这是为了检查是否启用了第三方cookie。根据它们是否是,它将隐藏或显示DOM元素,特别是隐藏iFrame,并显示一个窗口,说明它们需要启用第三方cookie,或者有一个可以单击的链接 我有一个.NETMVC应用程序,它有一个控制器和两个动作。操作1称为setcookie,只

大家下午好,我有一个独特的情况,我正在尝试按特定顺序加载javascript。看起来浏览器一次通过多个文件从服务器请求javascript。我的问题是,我需要加载一个,它设置了一个cookie,然后我需要第二个cookie。这是为了检查是否启用了第三方cookie。根据它们是否是,它将隐藏或显示DOM元素,特别是隐藏iFrame,并显示一个窗口,说明它们需要启用第三方cookie,或者有一个可以单击的链接

我有一个.NETMVC应用程序,它有一个控制器和两个动作。操作1称为setcookie,只返回一个cookie

第二个操作称为ValidateCookie,它检查cookie是否已发送,并返回一个返回true或false的简单Javascript函数。但问题是,有时浏览器会在setcookie之前调用ValidateCookie。我已经用fiddler验证了这一点。但它并不总是,通常是按正确的顺序调用的。也许十分之一的人是倒退的

我试着把SetCookie放在头上,在身体的末端验证。在正文顶部设置,在结尾验证,都在结尾,使用链接标记调用setcookie,使用img标记,使用CSS@import。设置延迟=无。我似乎无法让它以正确的顺序加载Java脚本。因为它的顺序不正确,所以很可能cookie result函数会返回false,即使它们确实启用了它们

我发现了一些解决方案,第一个javascript调用一个方法,该方法动态地将第二个脚本标记添加到html中。一切都很好,除了我需要在一切继续之前加载这2个Java脚本。并在所有其他脚本完成后加载动态添加的脚本标记


也许这是不可能的,因为现在所有的事情都是同时加载多个文件。

当请求第二个脚本时,从第一个脚本生成cookie并发送到服务器的唯一方法是在第一个脚本设置cookie后手动加载第二个脚本。您不能依靠
标记来为您执行此操作,因为允许浏览器预取脚本,即使它们将按
标记顺序执行

因此,事件的顺序如下:

  • 第一个脚本加载并执行
  • Cookie设置好了
  • 第二个脚本将动态添加到文档中
  • 您还必须确保第二个脚本没有被缓存,可能是在URL的末尾附加一个唯一的参数(通常是一个日期时间戳)

    您还需要确保页面、脚本和cookie都位于公共域中,并在cookie上进行了适当的设置,以便它们都可以访问cookie

    下面是一个示例(firstscript.js设置cookie,当请求secondscript.js时将其发送到服务器):

    
    (功能(){
    var dynScript=document.createElement(“脚本”);
    var now=new Date().getTime();
    dynScript.src=“secondscript.js?ts=“+now;
    document.getElementsByTagName(“head”)[0].appendChild(dynScript);
    })();
    
    这几乎就是我得出的结论。这意味着重新考虑所有脚本,并将它们放入onload,或者使用jquery或其他库。我希望能找到解决办法。@Edward-动态加载脚本(比如四行代码)很简单。你不需要图书馆。通过依赖脚本的顺序执行,您可以知道第一个脚本何时完成执行。感谢您提供的示例。这很接近我所想的结果。@Edward-既然你对StackOverflow相当陌生,你是否了解StackOverflow协议,如果有一个答案满足你的问题,请选择答案左边的绿色复选标记?
    <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>