计算类的实例 - 使用Firebug将jQuery注入第三方网站?

时间:2014-07-14 22:25:06

标签: javascript jquery html firebug

我正在访问带有评论部分的第三方网页。

相关网站: http://www.cbc.ca/news/technology/canadian-led-research-looks-to-grow-strawberries-on-mars-1.2704433

评论部分仅显示一些评论并显示“显示更多”按钮。我正在编写一个脚本,它将继续自动按“显示更多”按钮,直到显示所有注释。一旦“显示更多”按钮不再显示,我想触发一个新功能。

我试图通过Firefox(30.0)中Firebug(2.0.1)中的命令行将我自己的JavaScript“注入”第三方页面来实现这一目标。

使用Firebug我发现“显示更多”按钮的类是vf-load-more。我创建了一个setInterval()函数调用,并且能够成功地“重复”单击该按钮。

现在我正在尝试实施“评论结束”的认可。我这样做是通过计算页面上vf-load-more的实例来实现的。如果没有vf-load-more的实例,请启动下一个功能。

numShowMore = $('.vf-load-more').length;
if (numShowMore == 0) {
    clearInterval(interval1);
    nextFunction(); //This function has not been written yet
}

问题: $(".vf-load-more").length;正在返回undefined。为什么?页面上的按钮

完整的代码:

//This injects a jQuery reference into the header
var script = document.createElement('script');
script.src = '//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js';
document.body.appendChild(script);

//If jQuery is loaded execute the rest of the code
if (!window.jQuery)
{
  alert('jQuery is GO');

  var numShowMore;

  function clickButton()
  {
    numShowMore = $('.vf-load-more').length;
    alert('numShowMore = ' + numShowMore); //This alert returns "undefined"??
    if (numShowMore == 0) {
      clearInterval(interval1);
      nextFunction(); //This function has not been written yet
    }
    $('.vf-load-more').click();
  }

  var interval1 = setInterval(clickButton, 3000);
}

现在变得奇怪了。如果我让间隔继续运行并“单击”“显示更多”按钮,直到显示所有注释,它将最终停止显示“显示更多”按钮。然后我通过在命令编辑器中运行clearInterval(interval1);来强制间隔停止,然后当我运行以下代码时,它会发出警告numShowMore = 1,但按钮不再存在。

numShowMore = $('.vf-load-more').length;
alert('numShowMore = ' + numShowMore);

为什么不是0?

1 个答案:

答案 0 :(得分:0)

我尝试用$替换jQuery jQuery并且它有效。我不知道为什么,但我认为jQuery可能与页面上加载的另一个库发生冲突。

$('.vf-load-more').length;

替换为

jQuery('.vf-load-more').length;

$('.vf-load-more').click();

替换为

jQuery('.vf-load-more').click();

我也注意到你的代码有问题,在if条件中检查jQuery是否加载,条件反转,它应该是

if (window.jQuery){
//do stuff
}

但是,由于您正在加载可能需要一段时间才能加载的外部脚本,因此如果未加载库,则条件可能为false,因此最好使用setInterval或{{1}检查是否加载了jQuery以及是否加载了jQuery,然后执行代码。

这样的事情:

setTimeout