情况:
我正在 ASP.NET 中使用带有标记和 javascript 的 HTML 文件、几个 .js 文件、样式表以及 ASP.NET 页面上的一些附加内联 javascript 构建一个页面。在 Visual Studio 2010 中使用 ASP>NET 开发服务器主机。
XML 和 js 文件由第三方提供,无法更改,其中一个 js 文件是“我们的”文件,可以更改。
HTML 文件是可以填写的调查问卷。目前,我们有一个桌面应用程序来“托管”HTML 文件并保存答案。
总体目标是在网站中托管调查问卷,以便我们可以在网络上复制桌面应用程序的功能。 Javascript 将用于复制桌面应用程序不复制 ASP.NET 的内容。
HTML 文件包含 <script>
指向 js 文件的链接以及标记后的一大块内联 javascript。 内联 javascript 中的一行(不是函数,而是实际的代码行)调用“我们的”包含文件中的函数。
在 ASP.NET 代码中,我从 HTML 文件中提取内容并将其应用于构建 ASP.NET 页面。 CSS 链接、脚本链接、标记、内联脚本 block 等。因此输出响应如下所示:
<html>
<head>
<link to CSS>
<script src=thirdparty.js>
<script src=our.js>
</head>
<body>
third party HTML markup
<script>
line of code here that calls function in our.js;
</script>
<script>
desktop duplication code here;
</script>
</body>
</html>
如果我复制 js 文件的内容并将它们作为内联脚本 block 构建到页面中,一切都会正常工作。如果我将它们作为链接包含,那么有时上面提到的行会抛出一个 调试器中出现“函数未定义”错误。即,它的行为就像未加载/包含 javascript 文件一样。据我所知,这不应该发生,因为所有的 javascript 都应该在运行之前加载和解析。
问题:
JavaScript 是否乱序/异步加载?如果是这样,我怎样才能在该行运行之前强制加载和解析所有 JavaScript。
注释:
是的,我确实必须在 ASP.NET 中构建页面,"file"是动态的并且实际上是从 Web 服务读取的,因此无法提前准备。我正在尝试创建一种处理多个 vendor 调查问卷的通用方法。
第三方 JavaScript 和标记仅适用于 IE,因为它是一个遗留系统。
由于显而易见的原因,我无法显示实际代码。
最佳答案
我找到的答案与我上面提到的问题无关。
当页面工作时,DOCTYPE 标记不存在,但当页面失败时,DOCTYPE 标记存在。因此,问题在于第三方标记不符合任何形式的标准,为了使其正常工作,浏览器必须处于怪异模式,这是通过省略 DOCTYPE 标记来实现的。
一点也不明显。
关于javascript - ASP.NET 和 Javascript 链接和事件顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10446002/