jjzjj

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

coder 2024-05-10 原文

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

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

我该怎么办?

最佳答案

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

但是,让我们考虑一下,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个月),但值得一读。您还可以查看javascript-automation标签以获得一些示例。

我还发现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/

    有关javascript - 在JavaScript中,如何在特定时间运行函数?的更多相关文章

    1. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

      总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

    2. ruby - 如何在 Ruby 中顺序创建 PI - 2

      出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits

    3. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

      如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

    4. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

      我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

    5. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

      在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

    6. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

      exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

    7. ruby - 无法运行 Rails 2.x 应用程序 - 2

      我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

    8. ruby - 如何在续集中重新加载表模式? - 2

      鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende

    9. ruby - 如何在 Ruby 中拆分参数字符串 Bash 样式? - 2

      我正在为一个项目制作一个简单的shell,我希望像在Bash中一样解析参数字符串。foobar"helloworld"fooz应该变成:["foo","bar","helloworld","fooz"]等等。到目前为止,我一直在使用CSV::parse_line,将列分隔符设置为""和.compact输出。问题是我现在必须选择是要支持单引号还是双引号。CSV不支持超过一个分隔符。Python有一个名为shlex的模块:>>>shlex.split("Test'helloworld'foo")['Test','helloworld','foo']>>>shlex.split('Test"

    10. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

      我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

    随机推荐