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

标签 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“注入(inject)”到第三方页面来实现此目的。

使用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?

最佳答案

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

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

替换为

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

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

替换为

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

我还注意到你的代码有问题,在检查 jQuery 是否加载的 if 条件中,条件颠倒了,应该是

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

但是,由于您正在加载外部脚本,可能需要一些时间才能加载,因此如果未加载库,则条件可能为 false,因此最好使用 setIntervalsetTimeout 检查 jQuery 是否已加载,如果已加载,则执行您的代码。

类似这样的事情:

//If jQuery is loaded execute the rest of the code
var jqueryCheckTimer = setInterval(function(){
if(window.jQuery){
        clearInterval(jqueryCheckTimer);
         var interval1 = setInterval(clickButton, 3000);
    }
},100);

关于javascript - 计算类的实例 - 使用 Firebug 将 jQuery 注入(inject)第三方网站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24747033/

相关文章:

javascript - Webpack-即使在 npm 安装后也找不到模块

javascript - Fabric.js 在开始时停止在 chrome 中响应

jquery - 溢出 :scroll prevents slider gif from displaying

javascript - 动态添加/删除表单输入元素

javascript - 选中单选按钮时启用表单按钮

javascript - 我如何使背景图像可以右键单击?

javascript - 在已知符号之间提取字符串并将其分配为仅使用 javascript 的可重用变量

html - 在单页应用程序中将页脚设置为底部

html - 拉伸(stretch) <li> 以填充水平导航菜单,在 960 网格 12 col 内

html - 为什么 my::before 元素仅在我使用绝对位置时显示?