簡體   English   中英

在頁面加載時從客戶端獲取Javascript值

[英]Getting Javascript values from client on page load

我正在嘗試確定頁面加載時的客戶端窗口大小,以便在使用c#創建位圖時使用。 通過閱讀SO和其他地方的內容,我知道一種方法是:

  1. 編寫Javascript函數以獲取相關值;
  2. 將它們存儲在隱藏字段中;
  3. 使用(c#)后面的代碼讀取值,然后對其進行處理。

但是,即使我設置了<body onload...來獲取並設置相關值,我也會被在任何Javascript之前運行代碼的執行序列所絆倒。 (見下文)

我知道我的其余代碼都可以正常工作,因為當我執行該代碼時,頁面上將顯示單詞“ by”和按鈕。 然后,在單擊按鈕並重新加載頁面之后,它現在可以突然讀取兩個隱藏值。

我的問題是,如何執行其余代碼之前 ,如何從客戶端獲取c#Page_Load代碼以從客戶端獲取這兩個隱藏值,而無需單擊按鈕等用戶操作?

我的頁面:

<body onload="getScreenSize()">
    <form id="form1" runat="server">

        <input type="hidden" name="hiddenW" ID="hiddenW" runat="server" />
        <input type="hidden" name="hiddenH" ID="hiddenH" runat="server" />
   <script>
       function getScreenSize() {
           var myW = document.getElementById("hiddenW");
           myW.value = window.innerWidth;
           var myH = document.getElementById("hiddenH");
           myH.value = window.innerHeight;
       }
   </script>
        <asp:Button ID="Button1" runat="server" Text="Button" />
    </form>
</body>

后面的代碼:

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write(hiddenW.Value+" by " +hiddenH.Value);
    }

}

在第一次運行時(當我需要這些值時),它顯示

在此處輸入圖片說明

在單擊按鈕后,它證明了Javascript可以正常工作:

在此處輸入圖片說明

那么問題是在其余的Page_Load代碼運行之前 ,如何獲取這些值,以便可以直接生成和顯示圖像?

在C# Page_Load()執行之前,您無法獲得客戶端窗口的大小,因為在C#代碼執行完成之后,頁面已呈現給客戶端。
在頁面加載期間,窗口大小可能會更改,因此,僅在頁面加載完成后才需要獲取窗口大小。

解決方案
頁面完全加載后,可以使用ajax將值發送到后端。
要么
獲得正確的值后,可以使用java-script進行回發,如下所示:
jQuery的:

$(function() {
    var width = window.innerWidth ||
            document.documentElement.clientWidth ||
            document.body.clientWidth;
    var height = window.innerHeight ||
             document.documentElement.clientHeight ||
             document.body.clientHeight;
    $('#hdn_width').val(width);
    $('#hdn_height').val(height);
    $('#your_form').submit();
});

C#:

protected void Page_Load(object sender, EventArgs e)
{
    try
    {
        if (IsPostBack)
        {
            // Use hdn_width and hdn_height here
        }
    }
    catch (Exception ex)
    {
    }
}

使用IsPostBack屬性

這樣可以解決你的問題

For Example

if(!Page.IsPostBack)
{
   //Control Initialization
   //Your code goes here
}

我使用了一個計時器來回發一次和兩個未顯示的文本框來存儲窗口值的寬度和高度。 文本框填充了javascript:

document.getElementById('<%=TxWd.ClientID %>').value = window.innerWidth;
document.getElementById('<%=TxHt.ClientID %>').value = window.innerHeight;

在(VB.NET)后面的代碼中:

Protected Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    Session("seswidth") = Val(TxWd.Text)
    Session("sesheigth") = Val(TxHt.Text)
    Timer1.Enabled = False
End Sub 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM