2017-11-18 79 views
1

我一直在学习javascript浏览通过OpenStack并需要一点指导,我已经编写了下面的代码在Chrome中打开一个网站(我的默认浏览器),等待5秒,然后使用do/while循环刷新10次。新手 - 在Mac上的Javascript代码来控制Chrome

它看起来不错,因为我想从终端运行它吗?我一直在Chrome开发人员控制台中运行此操作,并希望在我的Mac(10.9.5)上运行它,是否仅通过automator运行它?

非常感谢您的帮助!

var vcount = 0; 
 

 
function sleep(time) { 
 
    return new Promise((resolve) => setTimeout(resolve, time)); 
 
} 
 

 
do { 
 
    window.location.assign("https://www.w3schools.com"); 
 
    sleep(10000).then(() => {}); 
 
    vcount++; 
 
} 
 
while (vcount < 10);

+1

不,因为'sleep(10000).then((=)=> {});'不会“暂停” - 同样,一旦你改变了当前位置,这个脚本将不再处于当前页面,不管怎样, –

回答

1

您需要使用等待真正暂停exectution:

(async function(){ 
    do { 
    window.location.assign("https://www.w3schools.com"); 
    await sleep(10000); 
    vcount++; 
    } while (vcount < 10); 
})(); 
+0

啊,谢谢乔纳斯,我试图找到那种类型的命令,我正在寻找'睡眠'和'等待',然后偶然发现了我用过的方法,我会用你的代码! – PCF

0

有很多方法可以做到你想要什么,@JonasW给了一个他们,这里是一个替代方案:

function sleep(ms) { 
    const waitUntil = new Date().getTime() + ms; 
    while (new Date().getTime() < waitUntil) true; 
} 

这将在没有await/Promise的情况下运行。

编辑

⚠️此外,你需要收拾一切功能,所以它不会冻结浏览器,因为JavaScript是在一个线程中运行:

setTimeout(function() { 
    /* Your code */ 
}, 0) 
+0

谢谢亚瑟,是否有任何理由使用一种方法高于另一种?另外,如何进行单一动作有多种方法? – PCF

+0

@PCF是的,有一个原因:并非所有的浏览器都支持相同的功能,'await'和'Promise'是在最近版本的JavaScript中引入的,并且在最新版本的Chrome,Safari和Firefox上都受支持。如果您使用我的方法,它将在更多浏览器(如IE)上得到支持。而且,是的,在每种编程语言中,都有很多方法可以做同样的事情。这就像同义词。 –

+0

这是一个糟糕的做法,因为它冻结了浏览器。 –