您好,
我正在浏览以下 discourse 论坛
我需要找到单词“mac”。
使用 CTRL+F 时,只有当该字符串在屏幕上时才能找到它。滚动本身会导致匹配项消失。
它还会干扰滚动条上的滚动位置匹配指示器
我理解声称这是为了“节省内存”,但这个系统有 64 GB 的内存,而这个页面不到 100 KB 的文本。因此,我明白这实际上是一种反抓取功能,就像 Facebook 使用的那样,以防止(但未能)抓取。
搜索这个奇怪的错误时,我发现了大量关于这个极其具有破坏性的反功能(anti-feature)的抱怨。
有什么替代方法?
可以在客户端禁用它吗?
在打印模式下加载页面怎么样?
有没有办法强制完全只以文本形式转储整个页面,这样我就可以在文本编辑器中查看它?
关于 greasemonkey 脚本,有没有什么可以打破该功能(即从内存中卸载文本以便搜索)?
我唯一的选择是不是要渗透数据库服务器,窃取所有 discourse 内容,然后编写代码来显示评论线程而不受这些干扰?
我看到从 2014 年开始就有关于此问题的抱怨,所以我想没有人愿意解决这个问题,这是一个“特性而不是错误”,但却是为所有者而不是用户准备的特性?
关于这个非常严重的问题,“元”(meta)是什么,以至于让我一想到不得不浏览“discourse”论坛就感到恐惧?
是的,我很恼火,你怎么看?
Falco
(Falco)
3
谢谢!
raw 方法为我解决了问题,
有没有可以自动以原始方式加载每一页的插件?
我正在写另一条消息,抱歉我不能花一整天时间等待超时一张图片一张图片地加载。
对不起,
我刚才在尝试解决一个 OpenWrt 的问题。
我因为无法像期望浏览器那样进行搜索而感到非常沮丧。
我很抱歉您觉得我不花时间在这里是不礼貌的,但请从我的角度理解。
我正在努力使用这个软件,以至于我开始寻找克服这个问题的解决方案。
当我找不到解决方案时,我找到软件名称,找到它的讨论区,注册一个账户,通过验证码,完成邮件验证,在论坛里搜索类似的问题,找到一些,但它们是关闭的,找到其他的,决定发一个新帖子,开始写作,写下我的完整评论,附带许多图片示例,
然后我点击回复,收到一条错误消息,说一次只能发布一张图片。
这需要我编辑我的整个消息,而我的消息的连贯性依赖于那些截图。
所以我尝试将我的消息分成每帖一张图片,但随后在消息之间存在一个未知的超时等待时间,我只想回去工作,我开始想,这些人肯定知道这种挣扎,所以我告诉他们我被这个困扰了多少并不会增加任何东西。
但事实并非如此,作为一个高级用户,我有责任让开发者知道其他用户的挣扎,现在我已经花了整整半个小时来努力讲述我的挣扎。
所以……如果这不礼貌,我很抱歉,但我不想再花费不确定数量的额外时间来发现和执行发布我的消息所需的任何操作。
但我向您保证,我无意对您不礼貌,我只是非常沮丧!
Thefacto
(Thefacto)
9
各位好,我遇到了和大家一样的烦人问题:在 Discourse 中使用 CTRL+F 搜索时,当前屏幕外的内容会因为“懒加载/从内存卸载”系统而消失。即使有 64GB 内存,你也无法在浏览器中搜索整个主题。据我了解,这更多的是一种反抓取功能,而不是节省内存的功能。以下是我找到的有效(且更安全)的替代方法:
-
使用打印视图:在主题 URL 末尾添加 /print,例如 https://forum.example.com/t/topic-name/12345/print。这会一次性加载主题中的所有帖子,并可与浏览器搜索 (CTRL+F) 配合使用。布局是简化的,但非常适合全文搜索。
-
滚动直到所有内容加载:持续滚动,直到懒加载系统在 DOM 中渲染出所有帖子。然后 CTRL+F 就能找到所有内容。对于长帖子串来说可能很繁琐,但无需额外工具即可工作。
-
使用 Discourse API:每个主题都有一个 JSON 端点,例如 https://forum.example.com/t/{topic_id}.json。你可以从 post_stream.posts 数组中提取所有帖子,在文本编辑器中打开,然后舒适地进行搜索。安全、官方,并且无论懒加载如何都能工作。
-
用户脚本/Greasemonkey 方法:你可以使用这个适用于 Chrome/Firefox 的简单用户脚本来自动化全页面帖子加载。它会自动点击“加载更多帖子”,直到主题完全渲染:
// ==UserScript==
// @name Discourse Load All Posts
// @namespace http://tampermonkey.net/
// @version 1.0
// @description Auto-click "load more posts" to fully render topic for search
// @match https://*/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
function loadAll() {
const button = document.querySelector('.load-more[data-more-url]');
if (button) {
button.click();
setTimeout(loadAll, 500); // 等待后重试
}
}
window.addEventListener('load', () => {
setTimeout(loadAll, 1000); // 页面加载后延迟一秒开始
});
})();
完成后,CTRL+F 就可以搜索帖子中的所有内容了。
导出/外部搜索:使用打印视图或 API JSON 将帖子导出为 PDF、HTML 或纯文本。在 VSCode 或 Notepad++ 等编辑器中打开以进行全文搜索。
不要尝试服务器黑客攻击:渗透数据库或在服务器端抓取内容是违法的且不必要的。使用 API/打印视图/用户脚本——它们都是安全的并能可靠地工作。
总结:最简单的方法是使用 /print 视图。更灵活的方法是使用 API JSON 或用户脚本。一旦所有帖子都加载到 DOM 中,CTRL+F 就能工作。希望 Discourse 团队能看到这一点,并考虑将来提供一个“完整搜索”选项——对于进行研究或深度阅读主题的任何人来说,这是一个严重的 UX 问题 
Thefacto
(Thefacto)
11
为了澄清我分享的用户脚本:我编写它是专门用于我正在使用的论坛的,因此如果您尝试将其改编到其他网站,HTML 结构可能会有所不同。该脚本适用于使用“加载更多帖子”(延迟加载)系统的标准 Discourse 主题,方法是自动重复点击“加载更多帖子”按钮,直到所有帖子都加载到文档对象模型 (DOM) 中。加载所有帖子后,您可以像往常一样使用浏览器的 CTRL+F 搜索任何关键词。
事实上,许多人多年来一直使用 Tampermonkey/Greasemonkey 以这种方式处理 Discourse,即使在非常大的论坛上也能很好地工作。
注意:某些论坛可能会更改按钮的类(例如,\.load-more\[data-more-url\]),因此您可能需要稍微调整选择器以匹配实际的按钮。