javascript – PhantomJS 2:检测未触发事件的点击

前端之家收集整理的这篇文章主要介绍了javascript – PhantomJS 2:检测未触发事件的点击前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用PhantomJS 2来点击页面的元素.但是,我不知道点击这些元素是否会触发事件(例如页面加载).

我希望能够处理这两种情况:

>当单击元素触发页面加载时,我想等到新页面加载完毕.
>当点击不触发事件时,我希望能够识别(无需等待很长的超时).

在PhantomJS 1中,我可以简单地使用这样的闭包:

function click(page,elem,callback) {
  var loading = false;

  page.set('onLoadStarted',function() {
    loading = true;
  });

  page.set('onLoadFinished',function() {
    callback('click triggered page load');
  });

  triggerClick(page,elem);

  setTimeout(function() {
    if ( ! loading) {
      callback('click did not trigger page load');
    }
  },100);
}

这里我将关闭加载变量,它充当事件处理程序和setTimeout中函数之间的“通信通道”.

>如果click触发了页面加载,onLoadFinished处理程序将在加载页面调用回调.
>如果单击不触发页面加载,setTimeout中的函数将在100ms后调用回调(这是可接受的).

代码在PhantomJS 1下运行良好.

不幸的是,在PhantomJS 2下,onLoadStarted和onLoadFinished的事件处理程序不再能够访问加载变量(即它们看起来不再像闭包一样工作).

所以现在我想知道如何在PhantomJS 2中实现相同的行为.任何想法?

PS:我知道我必须通过PhantomJS 2中的page.property(…)安装事件处理程序,而不是像PhantomJS 1那样使用page.set(…).

编辑:我正在使用节点包phantom(https://www.npmjs.com/package/phantom)作为节点和节点之间的桥梁. phantomjs.

解决方法

对我来说,解决方案实际上是放弃节点桥,而是使用纯粹的幻像.这导致以下相应的代码像魅力一样工作,即使使用PhantomJS 2:
function click(page,callback) {
  var loading = false;

  page.onLoadStarted = function() {
    loading = true;
  };

  page.onLoadFinished = function() {
    callback('click triggered page load');
  };

  triggerClick(page,100);
}

猜你在找的JavaScript相关文章