2

情况:

我在 ASP.NET 中从一个带有标记和 javascript 的 HTML 文件、几个 .js 文件、样式表和 ASP.NET 页面上的一些额外的内联 javascript 构建一个页面。使用 ASP>NET 开发服务器主机在 Visual Studio 2010 中工作。

XML 和 js 文件由第三方提供,不能更改,其中一个 js 文件是“我们的”文件,可以更改。

HTML 文件是一个可以填写的问卷。目前,我们有一个“托管”HTML 文件并保存答案的桌面应用程序。

总体目标是将调查问卷托管在网站中,以便我们可以从网络上的桌面应用程序复制功能。Javascript 将用于复制 ASP.NET 没有的桌面应用程序。

HTML 文件包含<script>指向 js 文件的链接和标记后的一大块内联 javascript。内联 javascript 中的一行(不是函数,是实际的代码行)调用“我们的”包含文件中的函数。

在 ASP.NET 代码中,我从 HTML 文件中提取内容并将其应用于构建 ASP.NET 页面。CSS 链接、脚本链接、标记、内联脚本块等。所以输出响应如下所示:

<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 文件的内容并将它们作为内联脚本块构建到页面中,一切正常。如果我将它们作为链接包含,那么有时上面提到的行会在调试器中引发“函数未定义”错误。即它的行为就像没有加载/包含 javascript 文件一样。据我所知,这不应该发生,因为所有的 javascript 都应该在运行之前加载和解析。

问题:

javascript 是否乱序/异步加载?如果是这样,我怎样才能在运行该行之前强制所有 javascript 加载和解析。

笔记:

是的,我必须在 ASP.NET 中构建页面,“文件”是动态的,实际上是从 Web 服务中读取的,因此无法事先准备好。我正在尝试创建的是一种处理多个供应商问卷的通用方法。

第三方 javascript 和标记仅适用于 IE,因为它是一个遗留系统。

由于明显的原因,我无法显示实际代码。

4

2 回答 2

3

我找到了与我上面所说的问题无关的答案。

页面工作时 DOCTYPE 标记不存在,但页面失败时出现。所以问题是第三方标记不符合任何形式的标准,为了让它工作,浏览器必须处于怪癖模式,这是通过省略 DOCTYPE 标记来完成的。

一点都不明显。

于 2012-05-16T14:17:24.660 回答
1

您是否尝试过使用准备就绪事件的文档来触发“此处调用 our.js 中的函数的代码行;”

如果你使用 jQuery,你会做这样的事情:

<script type="text/javascript">
  $(document).ready(function() {
    line of code here that calls function in our.js;
  })
</script>

如果您不想使用 jQuery,请查看没有jQuery 的 $(document).ready 等效项

另一种选择是在调用您的函数的 ASP.Net 页面的最底部添加标签,例如:

<html>
 <head>
  <link to CSS>
  <script src=thirdparty.js></script>
  <script src=our.js></script>
 </head>
 <body>
  third party HTML markup
  <script>
  desktop duplication code here;
  </script>
  <script>
   line of code here that calls function in our.js;
  </script>
 </body>
</html>
于 2012-05-04T09:28:08.577 回答