2009-05-20 6 views
6

Я использую скрытое поле «Isjsenabled», чтобы определить, включен или отключен Javascript клиента. Если Javascript включен, функция Javascript будет запущена, и значение скрытого поля будет установлено на 1.Как выполнить функцию Javascript перед загрузкой страницы?

Я хочу проверить скрытое значение со стороны сервера Page_load. Но проблема заключается в том, что Javascript запускается после загрузки страницы.

Есть ли у вас какие-либо предложения?

Html Часть

<script type="text/javascript"> 
    $(function() { 
     $("#<%= Isjsenabled.ClientID %>").val(1); 
    }); 
</script> 

<input id="Isjsenabled" runat="server" value ="0" type="hidden" /> 

Код За части

protected void Page_Load(object sender, EventArgs e) {     
    HtmlInputHidden hdn = this.FindControl("Isjsenabled") as HtmlInputHidden; 
     if (hdn != null) 
      if (hdn.Value != null && hdn.Value == "0") 
       Helper.SetCookie("IJE", "0"); 
      else 
       Helper.SetCookie("IJE", "1"); 
} 
+2

Вы забыли, что веб-модель является клиент-серверной. То, как вы приближаетесь к этому, невозможно. Это простой случай с курицей и яйцом, тележкой перед лошадью и т. Д. Обновленное значение в скрытом поле будет недоступно до тех пор, пока форма не будет отправлена ​​обратно. – x0n

+0

ха-ха .. Я не забываю, что знаю. Мне нужно какое-то предложение получить статус javascript с сервера. Я думаю, что есть какой-то способ, о котором я не мог думать в этот момент. – miti737

ответ

11

Не думая слишком трудно о направлении вы пытаетесь идти, там мало используется тег, который поддерживается всеми браузерами называемый NOSCRIPT.

<noscript> 
<img src="http://myserver/notify_no_script.aspx" style="display:none"> 
</noscript> 

Как вы можете видеть, идея состоит в том, чтобы заставить браузер запрашивать изображение, но только если javascript отключен. Эта страница может установить переменную сеанса, указав, что текущий клиент не имеет возможности сценариев, которые будут доступны для всего кода в текущем сеансе.

Или вы могли бы следовать вашей нынешней методологии:

<noscript> 
<input type="hidden" name="noscript" value="1"> 
</noscript> 
<script><!-- 
document.writeline('<input type="hidden" name="noscript" value="0">'); 
//--></script> 

Надеется, что это помогает,

-Oisin

+0

Спасибо за ваш ответ. HTML, который rendrered после того, используя 2-й вариант <тип скрипта = "текст/JavaScript "> '); // -> <ввод ID = тип "MyDetail_test1" = "скрытый" значение = имя "0" = "MyDetail $ test1" /> На самом деле я хочу, чтобы получить значение из стороны сервера. Если я добавлю runat = "server", оба скрытых поля могут быть восстановлены, если js включен. Что вы предлагаете? – miti737

+2

javascript запускается на _client_ ПОСЛЕ страницы на _server_. Как я уже упоминал в комментарии к вашему оригинальному вопросу, то, что вы пытаетесь сделать, невозможно. Чтобы прочитать * новое * значение поля, должна произойти обратная передача. На самом деле связь между браузером и страницей не существует. – x0n

+0

Спасибо Oisin за помощь и предложение. Я с тобой согласен. – miti737

1

Unobtrusive JavaScript может представлять интерес. Ухудшение грамотности ваших страниц упростит процесс разработки. Сначала проектируйте без JavaScript и улучшайте опыт. Это может быть не вариант, если ваше приложение чрезвычайно интенсивно работает JavaScript и абсолютно требует его функционирования. В этом случае использование тега noscript для информирования ваших пользователей о том, что им нужно включить JavaScript, было бы хорошей идеей.

Также обратите внимание на комментарии x0n. Вот ссылка, чтобы помочь понять HTTP request life cycle.

+0

Спасибо Даниилу за ваше предложение. «Ненавязчивый JavaScript» - это элегантный способ управления javascript. Спасибо, что поделился. На самом деле в соответствии с требованиями проекта мне нужно обнаружить Javascript браузера и сохранить где-нибудь для дальнейшей задачи на стороне сервера. Вот почему я искал решение, которое может быть упущено мной. – miti737

2

javascript может установить cookie сам по себе.

var myDate = new Date() 
document.cookie = 'IJE=1; expires=' + myDate.toGMTString() 

Это решение проблемы?

+0

Спасибо за помощь. Я сделал то же самое, так что мне не нужно устанавливать его из кода. Но если кто-то позволяет javascript после этого ... cookie существует. Мне нужно удалить/установить IJE = 0 со стороны сервера. – miti737

+0

Вы всегда можете установить IJE = 0 с серверной стороны, а затем установить IJE = 1 на javascript :) –

3

Вы должны нарисовать свой скрипт или заголовок noscript как страницу для себя, которая затем перенаправляет (либо через метатег, либо через файл location.href) в следующее место, куда вы хотите перейти, если включен javascript. Это займет 2 шага, но это даст вам результат, который вы ищете. Вы можете передать информацию, которая вам нужна, в запросе перенаправления.

+0

Спасибо Dredel. На самом деле у меня есть сетка с кнопкой «Go». Я хотел перенаправить соответствующую страницу js/nonjs с помощью динамической инициализации по методу grid_ItemCommand. Вот почему мне нужно было знать статус браузера из кода. Теперь мне кажется, что мне нужно как-то перенаправить его из javascript, так как вы предложили – miti737

+0

помнить, что «перенаправление» можно выполнить несколькими способами без javascript. Вы можете установить скрытую форму «submit()» в следующее место, когда пользователь нажимает кнопку «идти», вы можете сделать кнопку «go» ссылкой (прохождение параметров вместе с изменением местоположения), и вы можете сделать старую Мета перенаправляется по мере загрузки страницы. Если вы предложите более подробную информацию о том, что именно вы делаете, я могу дать вам менее обобщенный совет: –

Смежные вопросы