【问题标题】:How to keep a command running in loop in browser console如何在浏览器控制台中保持命令循环运行
【发布时间】:2016-05-26 14:17:37
【问题描述】:

我有一个网页元素,它只在页面(或页面的一部分)仍在加载时出现,在页面完全加载后消失。我想准确地看到这个元素什么时候消失,我可以通过在浏览器控制台中重复运行类似的东西来做到这一点:

$("div.v-app-loading")

或者:

document.getElementsByClassName('v-app-loading')

但在大多数情况下,一切都发生得太快了,我无法抓住确切的时刻。必须有一种方法可以创建一个循环,该循环将在控制台中运行并执行我提到的每 0.5 秒甚至更频繁的命令之一。

谁能指出我正确的方向?

【问题讨论】:

  • @epascarello 谢谢。这个问题真的那么糟糕,值得一票否决吗?
  • 有人这么认为
  • @epascarello 再次感谢 :)
  • @epascarello 刚刚注意到当我导航到另一个页面时循环停止运行。这正是我想要它运行的时间。我应该做些什么不同的事情?
  • 唯一的选择是在下一页加载时加载它

标签: javascript jquery browser css-selectors


【解决方案1】:

您可以使用 Javascript 的 setInterval() 如下:

function yourFunction(){
    //do something here...
}
setInterval(yourFunction(), 500); //Will run the function every half a second(500ms = 0.5s)

【讨论】:

  • 谢谢。但是如果我以这种方式运行它,它会在我导航到另一个页面时停止。我希望它连续运行。
  • 您这样做的唯一方法是从控制台运行它并检查preserved log(在 chrome 中),并且由于沙箱,您必须在同一个选项卡上。您不能从网页执行此操作...
  • 保留日志不会在下一页加载时运行 Javascript。
  • 你是对的,很抱歉错过领先(preserve log 只会保存已执行的 JS 输出)。请记住,chrome 在沙盒方面非常严重......
  • 这是不正确的代码,将运行一次。你的意思是setInterval(yourFunction, 500)
【解决方案2】:

也许使用jQuery来检测页面何时加载更容易:

HTML

<body class="loading">

JS

// do something initially here

$(window).load(function () {
    // do something when finished loading
    $('body').removeClass('loading');
});

编辑:如果您想检查元素是否存在,请在递归函数调用中进行。您可以使用 setTimeout 限制它,但您不需要:

function checkElement() {
    if ($('.v-app-loading').length) {
        checkElement();
        // or: setTimeout(checkElement, 100);
    } else {
        // Element disappeared
    }
}

checkElement();

【讨论】:

  • 嗯,这正是重点。页面本身可能显示为已加载,但该页面上的某些小部件仍在加载,因此在这种情况下,我会得到误报。此外,我特别需要确保仅当页面上的所有内容都已加载时,该 web 元素实际消失时我所描述的行为。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-24
  • 1970-01-01
相关资源
最近更新 更多