setTimeout在Chrome中似乎不起作用

4ktjp1zp  于 2023-01-28  发布在  Go
关注(0)|答案(3)|浏览(396)

这个setTimeout在Firefox中运行得很好,但是在Chrome中timeoutTrigger函数什么都没发生,包括alert。

var $this = $('.active-more');

function timeoutTrigger() {
    $this.closest(".container").nextAll(".container:first").find(".description:first").removeClass('hide');
    $this.closest(".container").nextAll(".container:first").find(".back:first").find("img.portfolio").remove();
    alert("is this thing on?");
}

setTimeout(function(){timeoutTrigger()},400)
qq24tv8q

qq24tv8q1#

setTimeout语句切换为以下语句:setTimeout(timeoutTrigger,400);你写的是当你调用的函数有一个参数的时候,你还少了一个分号。

vsikbqxv

vsikbqxv2#

我们在Chrome上的settimeout函数遇到了问题。我们希望每10秒运行一次API检查,以便在数据发生变化时更新页面内容。但是,尽管我们将settimeout函数设置为每10秒运行一次,但如果浏览器处于非活动状态,Chrome无法正确运行它。(而Safari即使处于非活动状态,也能正确运行代码)。
我们的实验表明,Chrome在不活动时运行我们的功能大约一分钟或更长时间,所以每分钟检查更新并不会破坏我们的代码。
但是我们有第二个函数,它每分钟运行一次,每分钟在本地更改一次内容。具体来说,我们更改了页面内容中显示的游戏的等待时间和播放时间。因此,由于我们不能依赖Chrome在确切的分钟运行,我们的解决方案是在代码第一次运行时保存,并检查日期之间的分钟数,并相应地更改等待时间和播放时间。

var $first_run_time; 
     var $minutes_passed = 0;
     var $total_minutes_used = 0;
     var $interval = 10000; // 10 seconds

     $current_date = new Date();
     $first_run_time = $current_date;
     console.log('Timeout started '+ $current_date.toLocaleTimeString());
     setTimeout(my_refresh_function, $interval));

    function my_refresh_function() {
            setTimeout(my_refresh_function, $interval);
            $current_date = new Date();
            console.log('Refresh run: ' + $current_date.toLocaleTimeString());
             $minutes_passed_from_start = Math.floor((Math.abs($current_date - $first_run_time)/1000)/60);

            $minutes_passed = $minutes_passed_from_start - $total_minutes_used;
  if ( $minutes_passed > 0 ) {
    
           // Make the changes you want for passed minutes
           // for example increase play time $play_time += $minutes_passed
           // and reduce waiting times $waiting_time -=  $minutes_passed
            console.log('Minutes updated +- '+ $minutes_passed + ' mins, at: ' + $current_date.toLocaleTimeString());

    $total_minutes_used += $minutes_passed;

      }
     }
trnvg8h3

trnvg8h33#

Google更改了内容安全政策,这会影响在某些浏览器中使用setTimeout()。https://developer.chrome.com/extensions/contentSecurityPolicy

相关问题