如何检测javascript是否在页面上执行

本文关键字:执行 是否 javascript 何检测 检测 | 更新日期: 2023-09-27 17:58:23

是否有方法检测javascript是否正在使用JQuery、javascript、WebDriver或C#(如浏览器API或其他)执行脚本?

例如,假设我在一个网页上,我刚刚从一个选择列表中选择了一个美国州(比如加利福尼亚州),一些javascript现在正在加载第二个选择列表,其中包含加利福尼亚州的所有城市。如何检测javascript是否正在执行,以及何时完成?

我遇到了WebDriver的问题,因为它不知道如何等待脚本停止执行,只需要暂停几秒钟。

如何检测javascript是否在页面上执行

您可以创建一个回调函数,当对picklist的调用结束时,它会触发回调。

示例: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");
  }
});

您的问题可以通过多种方式解决。

您是否试图从服务器端代码中查看浏览器上是否启用了javascript?我通过发送一个包含表单字段和一些javascript的小页面来填充该字段并返回。如果回邮没有发生,页面上会写一些关于"必须启用javascript"的内容如果它确实回发,我知道Javascript已经启用。

如果你是客户端用户,需要等待完成某些事情,比如加载美国州下拉列表,你需要连接完成类型的事件。浏览器本质上是异步的(这是一件好事),所以你需要"注册"关键事物的回调,以知道它们何时完成。

如果没有特定的标记或情况,很难提供更多。

检测某些函数是否正在运行的好方法是让它们在开始工作和完成工作时发出信号。例如,函数可以触发它正在工作的某个页面元素(我在这里使用的是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');
})

这是pub/sub概念的简单机制。顺便说一句,您可以阅读一些更高级的技术,如OpenAjax规范及其Hub实现:http://www.openajax.org/member/wiki/OpenAjax_Hub_2.0_Specification

哦,如果pub/sub不是你想要的,也许jQuery Deffered对象会很有用:http://api.jquery.com/category/deferred-object/

我认为如果JavaScript没有启用,你可以做一些事情,比如添加标签<noscript>Do Whatever You Want</noscript>,这样你就可以使其无效,或者其他什么,要有创意。

您实际上可以进行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())
  }
}