JavaScript 是not用于此目的的工具。如果您希望某些东西在每天的特定时间运行,那么您几乎肯定会寻找在本地运行的东西,例如python /questions/tagged/python or 苹果脚本 /questions/tagged/applescript.
然而,让我们考虑一下 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)
它不会执行于exactly8 点(除非你立即开始运行)因为它正在检查每分钟一次。您可以尽可能减少间隔以提高检查的准确性,但这有点矫枉过正:它会检查每一分钟 of 每隔一小时 of 每天查看现在是否是 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 https://superuser.com/q/126907/321976或者为 OS X 上的计划任务编写 Automator 工作流程。
如果您需要更多与平台无关的东西,我会认真考虑看看Python http://en.wikipedia.org/wiki/Python_(programming_language) or Bash http://en.wikipedia.org/wiki/Bash_(Unix_shell).
作为更新,用于自动化的 JavaScript https://developer.apple.com/library/mac/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/是在 OS X Yosemite 中引入的,它似乎提供了一种使用 JavaScript 来完成此类事情的可行方法(尽管显然您没有在相同的上下文中使用它;Apple 只是为您提供了一个在本地使用另一种脚本语言的界面) )。
如果您使用的是 OS X 并且确实想使用 JavaScript,我认为这就是正确的选择。
上面链接的发行说明似乎是撰写本文时唯一现有的文档(约塞米蒂向公众发布约 2 个月后),但它们值得一读。您还可以查看javascript 自动化 /questions/tagged/javascript-automation标签一些例子。
我还找到了JXA食谱 https://github.com/dtinth/JXA-Cookbook/wiki 极其有帮助。
您可能需要稍微调整此方法以适应您的特定情况,但我将给出一个总体概述。
- Create a blank Application in Automator.
- 打开 Automator.app(它应该位于您的应用程序目录中)并创建一个新文档。
- From the dialog, choose "Application."
- Add a JavaScript action.
- The next step is to actually add the JavaScript that will be executed. To do that, start by adding a "Run JavaScript" action from the sidebar to the workflow.
-
编写 JavaScript。
-
在继续之前,您必须知道自己想要做什么。根据您提供的内容,我假设您想要执行window.print()
在 Safari 中加载的页面上。你可以这样做(或者更一般地说,在 Safari 选项卡中执行任意 JS):
var safari = Application('Safari');
safari.doJavaScript('window.print();', { in: safari.windows[0].currentTab });
- 您可能需要调整哪一个
windows
您所访问的内容取决于您的设置。
- Save the Application.
- Save (
File -> Save
or ⌘+S) the file as an Application in a location you can find (or iCloud).
- Schedule it to run.
- 打开日历(或 iCal)。
- 创建一个新事件并为其指定一个可识别的名称;然后,将时间设置为您想要的运行时间(在本例中为上午 8:00)。
- 将事件设置为每天重复(或每周、每月等 - 无论您希望它运行多久)。
- 将警报(或警报,取决于您的版本)设置为自定义。
- 选择“打开文件”并选择您保存的应用程序文件。
- Choose "At time of event" for the alert timing option.
就是这样!您在应用程序文件中编写的 JavaScript 代码将在每次设置该事件运行时运行。您应该能够返回 Automator 中的文件并根据需要修改代码。