Javascript 每隔几秒钟刷新一个外部网页

Javascript 每隔几秒钟刷新一个外部网页,javascript,browser,scripting,wkuserscript,Javascript,Browser,Scripting,Wkuserscript,为了工作,我花了很多时间在特定领域的论坛上。一整天,我都在查看那些论坛,看看是否有任何与我所从事的工作相关的问题和答案。但是,我使用的特定站点不会自动更新,因此我必须刷新它。这没什么大不了的,但我决定将以下JavaScript脚本保存为书签: setInterval(function() { document.location.reload(true); }, 1000); 本质上,我想强制页面每秒重新加载一次。但是,当它重新加载时,似乎会导致脚本停止运行,因此脚本的唯一效果是一次重新加载。这并

为了工作,我花了很多时间在特定领域的论坛上。一整天,我都在查看那些论坛,看看是否有任何与我所从事的工作相关的问题和答案。但是,我使用的特定站点不会自动更新,因此我必须刷新它。这没什么大不了的,但我决定将以下JavaScript脚本保存为书签:

setInterval(function() { document.location.reload(true); }, 1000);
本质上,我想强制页面每秒重新加载一次。但是,当它重新加载时,似乎会导致脚本停止运行,因此脚本的唯一效果是一次重新加载。这并不比手工刷新网站更好

我想更一般的问题是“有没有办法让脚本在用户访问新网站时保持运行?”我猜没有,因为这样网站就可以在你浏览互联网的其他部分时跟踪你。尽管如此,似乎仍有脚本执行的级别;也许从书签执行脚本不同于网页上的标签;如果我是一名浏览器设计师,我会考虑到这一点,并将其视为独立于当前加载页面在后台运行的“浏览器代码”。浏览器就是这样工作的,还是它认为所有脚本都只是在当前加载的页面上运行

谢谢

“是否有任何方法可以让脚本在用户访问时保持运行 一个新网站?我猜不是。”

是的。嗯,您必须从客户机-服务器基础结构的角度来考虑。每当浏览器重新加载时,它都必须向服务器发送一个新的请求,从技术上讲,这将杀死当前DOM中所有正在运行的JS进程。这就是为什么仅仅使用
setInterval
本身也不起作用,因为进程被终止,并且永远不会进行新的重新加载

解决方案:您必须使用用户脚本

为了实现这一点,您必须将脚本单独放在浏览器的上下文中,而不是放在客户机-服务器体系结构中。这样,由于执行的上下文是浏览器而不是DOM,因此页面刷新不会终止JS进程。仅当关闭浏览器时,进程才会终止

如果您正在使用Chrome,请查看Chrome扩展,我相信这是在浏览器中管理用户脚本的最佳方式。通过创建新脚本、保存,然后在“脚本设置”下,将目标站点添加到“用户匹配”下,来添加脚本


限制:此解决方案仅适用于您自己(您可以在自己的浏览器上安装扩展或添加用户脚本),而不适用于网站的其他用户,因为我们不在客户端-服务器上下文中。

请按照以下步骤操作:

1. Install Tampermonkey as a Chrome extension
2. On Tampermonkey add a user script (+) and paste the follwing code
3. 

// ==UserScript==
// @name         Reload Page
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Reload given web page at a given pace (10 minutes in this case)
// @author       Your name or nick ;)
// @match        http://address_of_web_page_to_reload
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    var minutes = 10;
    setTimeout (function(){ location.reload(); }, minutes*60*1000);
})();
  • 保存脚本并打开具有所需地址的新网页
  • 检查页面是否每10分钟刷新一次
  • 玩得开心! pib

  • 用户脚本本质上只是浏览器执行的额外代码吗?这就是它听起来的样子,这很酷。如果是这样的话,我是否可以正确地假设添加用户脚本的过程会因浏览器而异(如果该浏览器甚至允许您添加用户脚本)?与其说是语言能力的问题,不如说是浏览器如何运行的问题?