1

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

setInterval(function() { document.location.reload(true); }, 1000);

本质上,我想强制页面每秒重新加载。但是,当它重新加载时,它似乎会导致我的脚本停止运行,因此我的脚本的唯一效果是一次重新加载。这并不比手动刷新网站更好。

我想更普遍的问题是“有没有办法让脚本即使在用户访问新站点时也能保持运行?” 我猜不是,因为当您浏览互联网的其余部分时,网站可能会跟踪您。尽管如此,似乎可能存在脚本执行级别。也许从书签执行脚本与网页上的 <script> 标记不同;如果我是浏览器设计师,我会考虑到这一点,并将其视为独立于当前加载页面的幕后运行的“浏览器代码”。这是浏览器的工作方式,还是它认为所有脚本都只是在当前加载的页面上运行?

谢谢!

4

2 回答 2

1

“有什么方法可以让脚本在用户访问新站点时保持运行?我猜不是。”

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

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

为了完成这项工作,您必须将脚本单独放在浏览器的上下文中,而不是客户端-服务器架构中。这样,由于执行的上下文是浏览器而不是 DOM,因此页面刷新不会杀死 JS 进程。该进程仅在您关闭浏览器时被终止。

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

在此处输入图像描述

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

于 2018-06-29T16:35:25.740 回答
0

请按照以下步骤操作:

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);
})();
  1. 保存脚本并使用所需地址打开一个新网页
  2. 检查页面是否每 10 分钟刷新一次!
  3. 玩得开心!皮布
于 2021-03-02T02:22:43.370 回答