2009-05-13 22 views
3

私はASP.netのコードベースを継承しており、ASP.netのスキルは非常に限られています。なぜ私は何かがうまく動作する理由とIEでしか動作しない理由を理解するのに苦労しています。HTMLボディのJavascriptは実行されたときに実行されますか?

次のコードでは、ページに表示されます: -

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="map.aspx.cs" Inherits="Romtrac.auth_map" Culture="auto" UICulture="auto" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head id="Head1" runat="server"> 
    <title> 
     <% = Resources.Resource.map %> 
    </title> 
</head> 
<body>  
    <form id="adminlw_map_form" action="<%=geturl()%>" method="post" > 

    <% = Resources.Resource.loading %>... 
    <textarea name="xml" id="xml" runat="server" style="display:none" cols="1" rows="1"></textarea> 
    </form> 
    <script language="javascript" type="text/javascript" > 
     //submit main form immediately 
     document.getElementById('adminlw_map_form').submit(); 
    </script> 
</body> 
</html> 

このコードはASP.netで細かい動作します。フォームは自動的に送信され、返されたページはIframe内で正しくレンダリングされます。私の質問は、

1)身体の中のJavaScriptは、遭遇したときに実行されるだけですか?この良い習慣であるか、それともイベントに応じて実行すべきか?

2)これは他のブラウザでは機能しないのはなぜですか?

+2

レンダリングされたHTMLソースをASPコードではなくポストすると、それがIEでのみ機能する理由を識別するのに役立ちます(ブラウザはサーバーサイドコードを気にしません) – DanSingerman

答えて

4
  1. はい
  2. ブラウザは完全にページをレンダリングする前にはJavaScriptが実行されています。この場合、フォームはレンダリングされておらず、DOMを介してアクセスできません。

DOMはブラウザによって完全にロードされた後に実行する必要があり、関数内で呼び出しをカプセル化し、その関数をbodyのonloadイベント経由で呼び出すか、以下のようなjavascriptライブラリを使用して実装できます。ページのロードイベントにフックするjquery。

3

1)はい、いいえ、jQueryは$(document).ready()関数でもっとも効果がありますが、Javascriptを実行する前にページの読み込みが完了するのを待つ必要があります。

2)これを心配する必要はありません。しかし、私はより良い答えで誰かにフロアを開いたままにします。

2

一部のブラウザでは、ページの読み込みにユーザーの介入なしにフォームが送信されないようにすることがありますが、セキュリティ上のリスクがあります。私はこの問題を過去に何回も経験しました。私は、ページの負荷を、例えば100msのwindow.setTimeoutと組み合わせるでしょう。

<body onload="window.setTimeout(document.getElementById('adminlw_map_form').submit, 100)"> 
.... 
1

JavaScriptを使用して邪魔にならないように注意してください。そこにはJSがオフになっているあなたのページが実際にそれにあるべきではない人がまだあります。これは機能強化の役割を果たすはずです。

関連する問題