微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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);
}

原文地址:https://www.jb51.cc/js/157387.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐