【问题标题】:Autoclick links on webpage for display自动点击网页上的链接以显示
【发布时间】:2018-03-09 08:27:36
【问题描述】:

我有一个包含 7 个链接的网页,我希望能够将其设置为自动点击,然后在切换时永远重复,点击之间有 60 秒的延迟。我想设置一个按钮来打开/关闭它。打开时,网页会执行点击动作,关闭时,网页会正常运行。我们的想法是将此功能用于显示目的(显示我们的各种指标等)。

我找到了这个描述使用 setInterval 的链接:Calling a function every 60 seconds

还有一个描述以编程方式单击链接的内容:How do I programmatically click a link with javascript? ,但一直找不到这两种方法结合使用的任何示例。

试过了:

function click_links(){
    $("safety").trigger("click");
}

window.setInterval(function(){

      click_links();
}, 2000); 

并调用:

onclick="click_links();"

但是,到目前为止,连点击事件都触发不了。

尝试 2: 我很接近这个:

function links() {
safety
daily
monday
tuesday
}

var intervalId;
function toggleIntervalb() {

  if (!intervalId) {
    intervalId = setTimeout(links, 5000); 
  } else {
    clearInterval(intervalId);
    intervalId = null;
  }
}

function safety(){
document.getElementById("fires").style.display = 'none';
document.getElementById("safety").style.display = 'block';
document.getElementById("daily").style.display = 'none';
document.getElementById("monday").style.display = 'none';
document.getElementById("tuesday").style.display = 'none';

}
function daily(){
document.getElementById("fires").style.display = 'none';
document.getElementById("safety").style.display = 'none';
document.getElementById("daily").style.display = 'block';
document.getElementById("monday").style.display = 'none';
document.getElementById("tuesday").style.display = 'none';

}
function monday(){
document.getElementById("fires").style.display = 'none';
document.getElementById("safety").style.display = 'none';
document.getElementById("daily").style.display = 'none';
document.getElementById("monday").style.display = 'block';
document.getElementById("tuesday").style.display = 'none';

function tuesday(){
document.getElementById("fires").style.display = 'none';
document.getElementById("safety").style.display = 'none';
document.getElementById("daily").style.display = 'none';
document.getElementById("monday").style.display = 'none';
document.getElementById("tuesday").style.display = 'block';

但是,5 秒后,它只执行集合中的最后一个函数(星期二),并且不会在每个函数之间有延迟地遍历它们。

【问题讨论】:

  • 这是可能的,但我建议您自己尝试一下,然后再回来尝试一些尝试,以获得该社区的最佳响应。
  • 看看setInterval()和jquery trigger()
  • 基本尝试更新了 OP。

标签: javascript jquery html automation


【解决方案1】:

How do I programmatically click a link with javascript? 中的答案不再准确;现在脚本启动的点击事件只是触发事件,they do not cause the browser to actually follow the links:

注意:手动触发事件不会生成与该事件关联的默认操作。例如,手动触发键事件不会导致该字母出现在焦点文本输入中。对于 UI 事件,出于安全原因,这很重要,因为它可以防止脚本模拟与浏览器本身交互的用户操作。

该文档适用于键盘事件,但同样适用于点击事件,如下所示:

$('#foo').on("click", function() {
 console.log("Click event fired");
});

$('#test').on("click",function() {
  $('#foo').trigger('click');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
   This will work: <a id="foo" href="https://example.com">Example link</a><br>

   This will fire the event but not follow the link: <button id="test">Trigger "click" event on link</button>

相反,您需要阅读每个链接的 href 和重定向:

$('#test').on("click",function() {
  var url = $('#foo').attr("href");
  window.location = url;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a id="foo" href="https://example.com">Example link</a><br>

<button id="test">Redirect to HREF from link</button>

(对于您想要的循环行为,当然,您需要将这些链接定位到 iframe 或单独的窗口中;否则,一旦用户被重定向到第一个链接,您的代码就会停止运行。)

【讨论】:

  • 如果重要的话,被点击的链接存在于一个永远不会离开屏幕的侧面板中。 URL 在主面板中打开。在这种情况下,脚本还会停止运行吗?
  • 假设两个面板都是 iframe,并且脚本不在导航发生的框架内,那么脚本将继续运行。
  • 因此,也许以编程方式单击链接不是正确的方法。当我手动单击一个链接时,它实际上只是在执行这种类型的操作: document.getElementById("link1").style.display = 'block'; document.getElementById("link2").style.display = 'none';.所以也许创建一个延迟循环来简单地设置这个的每个变体就可以了。
  • 啊,我明白了;那是完全不同的,你在这里根本不处理链接。这些应该基于以编程方式触发链接上的点击事件来工作,因为它不是默认的浏览器操作,它们不受手动调度事件的安全限制;它们只是自定义点击处理程序,就像我上面的“点击事件触发”函数。
  • (也就是说,直接设置 div 可见性的循环可能比触发点击事件容易得多。)
猜你喜欢
  • 1970-01-01
  • 2014-04-03
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多