2

状況:

マークアップとjavascript、いくつかの.jsファイル、スタイルシート、およびASP.NETページ上のいくつかの追加のインラインjavascriptを含むHTMLファイルからASP.NETでページを構築しています。VisualStudio2010でASP>NET開発サーバーホストを使用して作業します。

XMLファイルとjsファイルはサードパーティによって提供されており、変更することはできません。jsファイルの1つは「our」ファイルであり、変更することができます。

HTMLファイルは記入可能な質問票です。現在、HTMLファイルを「ホスト」して回答を保存するデスクトップアプリケーションがあります。

全体的な目標は、Webサイトでアンケートをホストして、Web上のデスクトップアプリケーションの機能を複製できるようにすることです。Javascriptは、デスクトップアプリケーションがASP.NETではないものを複製するために使用されます。

HTMLファイルには<script>、jsファイルへのリンクと、マークアップ後のインラインJavaScriptの大きなブロックが含まれています。インラインJavaScriptの行(関数ではなく、実際のコード行)は、「our」インクルードファイルの関数を呼び出します。

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を見てください。

もう1つの方法は、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 に答える