Как определить, выполняется ли JavaScript на странице - PullRequest
0 голосов
/ 01 июня 2011

Есть ли способ определить, выполняет ли javascript сценарий, используя JQuery, javascript, WebDriver или C # (например, API-интерфейс браузера или что-то в этом роде)?

Например, скажем, я на веб-странице, и я только что выбрал штат США (скажем, Калифорния) из списка выбора, и некоторые JavaScript теперь загружают второй список выбора со всеми городами, найденными в Калифорнии. Как я могу определить, выполняется ли JavaScript, и когда он закончился?

У меня проблемы с WebDriver, поскольку он не знает, как ждать, пока сценарий прекратит выполнение, за исключением паузы на несколько секунд.

Ответы [ 5 ]

2 голосов
/ 01 июня 2011

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

пример: http://api.jquery.com/jQuery.ajax/

$.ajax({
  url: "test.html", //your url to call
  success: function(){ //your function that is a callback
    $(this).addClass("done");
  }
});
1 голос
/ 02 июня 2011

Я думаю, что вы можете что-то сделать, если JavaScript не включен, например, добавить теги <noscript>Do Whatever You Want</noscript>, чтобы вы могли сделать недействительным или что-то еще, проявить творческий подход.

1 голос
/ 01 июня 2011

Хороший способ определить, запущены ли некоторые функции, - заставить их сигнализировать, когда они начинают работать и когда они завершены.Например, функция может вызывать какой-то элемент страницы, с которым она работает (я использую jQuery здесь):

function Announcer() {
   $('body').triggerHandler('startworking')

    //... do something useful...

   $('body').triggerHandler('endworking');
   return something;
}

, чтобы вы могли прослушивать элемент для событий и контролировать, как ваш код выполняется функциями обратного вызова.:

$('body').bind('startworking', function () {
  alert('Whoa, Announcer is started to work');
})

$('body').bind('endworking', function () {
   alert('Announcer just ended');
})

Это простой механизм концепции паб / саб.Кстати, вы можете прочитать о более продвинутой технике, такой как спецификация OpenAjax и ее реализация в Hub: http://www.openajax.org/member/wiki/OpenAjax_Hub_2.0_Specification

О, если pub / sub не совсем то, что вам нужно, может быть, полезен jQuery Deffered объект: http://api.jquery.com/category/deferred-object/

1 голос
/ 01 июня 2011

На ваш вопрос можно ответить несколькими способами.

Вы пытаетесь узнать, включен ли в браузере javascript из кода на стороне сервера?Я сделал это, отправив небольшую страницу с полем формы и некоторым javascript для заполнения этого поля и постбэк.если постбэк не происходит, на странице написано что-то вроде «JavaScript должен быть включен».Если он выполняет обратную передачу, я знаю, что Javascript включен.

Если вы на стороне клиента и вам нужно подождать, пока что-то завершится, например, при загрузке вашего штата США, вам нужно подключитьсясобытия типа завершения.Браузеры по своей природе асинхронны (это хорошо), поэтому вам нужно «зарегистрировать» обратные вызовы, чтобы знать, когда они завершены.

Без конкретной разметки или ситуаций сложно предложить больше.

0 голосов
/ 03 июня 2011

Вы можете сделать вызов ajax, чтобы получить данные для города в javascript. Выполнение этого с использованием объекта XMLHttp фактически позволяет выполнять вызовы асинхронно. При этом вы можете даже прикрепить функцию Javascript, которая вызывается при изменении состояния. Например,

try {

  xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");

} catch (e) {

  try {

   xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

  } catch (E) {

   xmlhttp = false;

  }
}

.....
.....

xmlhttp.onreadystatechange=function() {

  if (xmlhttp.readyState==4) {

    alert(xmlhttp.getAllResponseHeaders())

  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...