javascript - 在JavaScript中,如何在特定时间运行函数?

标签 javascript time intervals

我有一个托管仪表板的网站:我可以在页面上编辑JavaScript,目前每五秒钟刷新一次。

我现在想让window.print()每天早上8点运行。

我该怎么办?

最佳答案

JavaScript不是用于此目的的工具。如果您希望某项内容每天在特定时间运行,那么几乎可以肯定,您正在寻找某种在本地运行的内容,例如

但是,让我们考虑一下,JavaScript是您唯一的选择。您可以通过几种方法来执行此操作,但我将为您提供最简单的方法。

首先,您必须创建一个new Date()并设置一个检查间隔以查看小时是否为8(对于上午8点)。

这将每分钟(60000毫秒)检查一次,看看是否是八点钟:

window.setInterval(function(){ // Set interval for checking
    var date = new Date(); // Create a Date object to find out what time it is
    if(date.getHours() === 8 && date.getMinutes() === 0){ // Check the time
        // Do stuff
    }
}, 60000); // Repeat every 60000 milliseconds (1 minute)

由于它每分钟检查一次,因此它不会在8点正好执行(除非您立即开始运行)。您可以根据需要增加间隔的时间来减小检查间隔,但这实际上是过大的:它将每隔一小时检查一次,每天检查,每天检查,以查看是否是8点

检查的强度取决于JavaScript的性质:对于这类事情,有更好的语言和框架。因为JavaScript是在加载网页时在网页上运行的,所以它并不是要处理长期的扩展任务。

还应意识到,这需要打开正在执行的网页。也就是说,如果页面未打开,并且每天每分钟
进行计数和检查
,那么您就无法每天计划在上午8点执行操作。

您说您已经每五秒钟刷新一次页面:如果是这样,则根本不需要计时器。每次刷新页面时只需检查一下:
var date = new Date(); // Create Date object for a reference point
if(date.getHours() === 8 && date.getMinutes() === 0 && date.getSeconds() < 10){ // Check the time like above
   // Do stuff
}

这样,您还必须检查秒数,因为每五秒刷新一次,因此您将获得重复的任务。

如此说来,您可能想要执行this之类的操作或为OS X上的计划任务编写Automator工作流程。

如果您需要与平台无关的东西,我会认真考虑看看PythonBash

作为更新,JavaScript for Automation是OS X Yosemite引入的,它似乎提供了一种可行的方式来将JavaScript用于此类事情(尽管显然您不在同一上下文中使用它; Apple只是为您提供了一个接口(interface))在本地使用另一种脚本语言)。

如果您在OS X上并且真的想使用JavaScript,我认为这是要走的路。

截至本文撰写时,与上述链接的发行说明似乎是唯一的现有文档(约塞米蒂公开发布后约2个月),但值得一读。您还可以查看标签以获得一些示例。

我还发现JXA Cookbook非常有用。

您可能需要对这种方法进行一些调整,以适应您的特定情况,但我将进行概述。
  • 在Automator中创建一个空白应用程序。
  • 打开Automator.app(应位​​于“应用程序”目录中)并创建一个新文档。
  • 从对话框中选择“应用程序”。
  • 添加一个JavaScript操作。
  • 下一步是实际添加将要执行的JavaScript。为此,请从侧边栏中向工作流程添加“运行JavaScript”操作。
  • 编写JavaScript。
  • 在继续操作之前,您必须先了解要执行的操作。根据您提供的信息,我假设您要在Safari中加载的页面上执行window.print()。您可以这样做(或更普遍地说,在Safari选项卡中执行任意JS):
    var safari = Application('Safari');
    safari.doJavaScript('window.print();', { in: safari.windows[0].currentTab });
    
  • 您可能必须根据设置来调整要访问的windows
  • 保存应用程序。
  • 将文件(File -> Save或⌘+ S)保存为应用程序在您可以找到的位置(或iCloud)。
  • 安排它运行。
  • 打开日历(或iCal)。
  • 创建一个新事件,并为其指定一个可识别的名称;然后,将时间设置为所需的运行时间(在这种情况下为8:00 AM)。
  • 将事件设置为每天(或每周,每月等)重复一次-但是您经常希望它运行。
  • 将警报(或警报,取决于您的版本)设置为自定义。
  • 选择“打开文件”,然后选择保存的应用程序文件。
  • 为警报计时选项选择“事件发生时”。

  • 而已!每当将事件设置为运行时,您在Application文件中编写的JavaScript代码就会运行。您应该可以返回到Automator中的文件,并在需要时修改代码。

    关于javascript - 在JavaScript中,如何在特定时间运行函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24741530/

    相关文章:

    c# - 在 winForm C# 中使用 System.Threading.Timer 间隔触发方法

    javascript - 为什么 grunt-contrib-imagemin 将 PNG 减少 80%,但 JPG 仅减少 <0.1%?

    PHP/MySQL : Preventing duplicate actions quickly in succession

    c - 简单的 c 程序不产生所需的输出

    sql - 计算两个日期之间事件的记录数

    c++ - 使用 Boost ICL 查找范围包含一个点的所有对象

    javascript - 如何将对象数组分配给数组?

    javascript - 使用 Coffeescript 和 lodash 按 Id 查找

    javascript - 使用 jquery 和 php 拖放

    Java 将时间对象 (GMT) 转换为字符串 (GMT+1)