Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript settimeout在我尝试使用它刷新页面时无法正常工作_Javascript_Refresh_Settimeout_Userscripts_Tampermonkey - Fatal编程技术网

Javascript settimeout在我尝试使用它刷新页面时无法正常工作

Javascript settimeout在我尝试使用它刷新页面时无法正常工作,javascript,refresh,settimeout,userscripts,tampermonkey,Javascript,Refresh,Settimeout,Userscripts,Tampermonkey,此代码的目的是根据随机变量,在等待1秒或5秒后刷新页面。但是,下面的代码使其在每次等待1秒后刷新,或者在每次等待5秒后刷新 如何使每次刷新时的刷新等待时间为1秒或5秒 // ==UserScript== // @name google.com // @namespace John Galt // @description Basic Google Hello // @match *^https://www.google.com/$* // @version

此代码的目的是根据随机变量,在等待1秒或5秒后刷新页面。但是,下面的代码使其在每次等待1秒后刷新,或者在每次等待5秒后刷新

如何使每次刷新时的刷新等待时间为1秒或5秒

// ==UserScript==
// @name        google.com
// @namespace   John Galt
// @description Basic Google Hello
// @match       *^https://www.google.com/$*
// @version     1
// @require     https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js
// @grant       GM_xmlhttpRequest
// @run-at document-end
// ==/UserScript==

//*****************************************START OF SET_TIMEOUT
(function ($) {
  'use strict';
  var interval;
  if (Math.floor(Math.random() * 2) == 0) { interval = 1000; }
  else { interval = 5000; }
  if (window == window.top) {
    var body = $('body').empty();
    var myframe = $('<iframe>')
      .attr({ src: location.href })
      .css({ height: '95vh', width: '100%' })
      .appendTo(body)
      .on('load', function () {
        setTimeout(function () {
          myframe.attr({ src: location.href });
        }, interval);
      });
  }
})(jQuery);
//*****************************************END OF SET_TIMEOUT

问题是,当您将iframe指向当前文档时,包含iframe的文档只加载一次,这就是为什么您会看到重复使用相同的间隔,并且当iframe在其中加载相同的文件时,它为interval生成的值与控制iframe加载的值不同

我认为您应该在setTimeout中对当前文件执行AJAX请求。这样,您就可以通过再次执行AJAX调用来处理服务器错误。这会简单得多。没有iframe

功能${ "严格使用",; //在数组中存储可能的延迟值 var possibleDelays=[10005000]; 函数重载{ $.ajaxlocation.href .donefunction{ $h1.textnew Date.toLocaleTimeString; //成功!再来一次! setTimeoutreload,可能显示[Math.roundMath.random]; }.failreload;//出现错误时,请重试 } //以此处生成的间隔启动流程。 setTimeoutreload,可能显示[Math.roundMath.random]; }jQuery;
@ScottMarcus我已经编辑了代码,并尝试将其放入其中,但仍然无法正常工作。我把它放错地方了吗?问题是,当您将iframe指向当前文档时,包含iframe的文档只加载了一次,这就是为什么您会看到重复使用相同的间隔,并且当iframe在其中加载相同的文件时,它为interval生成的值与控制iframe加载的值不同。@ScottMarcus Oh。那么,有没有办法修复它,使其改变?让我问一下,你为什么要将当前页面加载到iframe中,而不是在同一窗口中重新加载当前页面?@ScottMarcus Oh。我使用iFrame的原因是,有时当我刷新页面时,它会给我503状态错误,如果它给我503状态错误,那么脚本将停止运行。当我使用iframe时,即使脚本遇到503错误,我也能保持脚本运行。我已经在tampermonkey中运行了你的代码,一旦它开始运行,如果开始时的随机数是1,它会在每次1秒后刷新,或者每次5秒,如果开始时随机数是5,这就是我正在测试的代码的完整运行版本。我正在使用tampermonkey,并且正在google.com上测试它。我在tampermonkey上测试了代码,但它一点也不刷新。它说的是意外的令牌;一点也不新鲜。当我在谷歌上测试它时,它就在那里。