javascript - 以特定顺序加载(请求)javascript

标签 javascript

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

我有一个 .net MVC 应用程序,它有一个 Controller 和 2 个操作。操作 1 称为 setcookie,除了设置 cookie 外什么都不返回。

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

我试过将 SetCookie 放在头部并在主体末尾进行验证。在正文顶部设置,在最后验证,都在最后,使用链接标签调用setcookie,使用img标签,使用CSS @import。设置延迟=无。我似乎无法让它以正确的顺序加载 javascript。因为它的顺序不正确,所以 cookie 结果函数很可能会返回 false,即使它们确实启用了它们。

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

也许这也是不可能的,因为现在一切都是关于同时加载多个文件。

最佳答案

当请求第二个脚本时,您可以将第一个脚本中的 cookie 发送到服务器的唯一方法是在第一个脚本设置 cookie 后手动加载第二个脚本。你不能依赖 <script>标记为您执行此操作,因为允许浏览器预取脚本,即使它们将在 <script> 中执行。标记顺序。

所以,事件的顺序是这样的:

  1. 第一个脚本加载并执行。
  2. Cookie 已设置。
  3. 第二个脚本被动态添加到文档中。

您还必须确保第二个脚本未被缓存,可能是通过在 URL 末尾附加一个唯一参数(通常是日期时间戳)。

您还需要确保页面、脚本和 cookie 都在公共(public)域中,并且对 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>

关于javascript - 以特定顺序加载(请求)javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15212579/

相关文章:

c# - Asp.Net:Javascript 模态窗口

javascript - 是否有可用于 “Share on Slack” 按钮的 URL?

javascript - 使用内部/外部 CSS 更改背景图片

javascript - lightgallery 库 + lg-thumbnail 插件

javascript - RxJS 是否有办法处理订阅者 Uncaught Error ?

javascript - 无法迭代 React Native 中的本地资源

javascript - 多个按钮的单击处理程序并停止将事件传播到父级?

php - 最佳JavaScript编辑器和调试器

javascript - 如何打开/关闭? (JavaScript)

php - 从一个页面到另一个页面进行通信? JavaScript、PHP?