如何在不安装插件的情况下在 Firefox 中恢复表单?

Joe*_*ams 33 linux firefox

可能的重复:
如何在 Firefox 中恢复网页的表单信息

我在讨论板上输入了几个段落,但是当我单击提交按钮时,该站点正在进行(非)计划维护,后退按钮决定刷新页面,使我的段落被遗忘。

快速网络搜索显示Lazarus为 Firefox 提供表单恢复。但是,安装插件需要重新启动 Firefox,即使在重新启动 Firefox(我还没有这样做)之后,Lazarus 也无法恢复它尚未备份的表单。

现在马已经离开了谷仓,我想做不可能的事:恢复我输入的部分或全部文本,而无需重新启动浏览器。


编辑:我应该澄清一下。 Lazarus是防止未来表单数据丢失的绝佳解决方案。这个问题适用于那些已经离开他们的形式并丢失了其内容的人,但希望有一些方法可以挽救这种情况。我的解决方案是获取进程的核心转储并通过它进行 grep,但可能有外行的方法来做到这一点(例如,以某种方式让 Firefox 加载上一页的缓存版本)。因此,只解决未来问题而不解决当前问题的解决方案在本问题中是题外话。

Joe*_*ams 60

不要重新启动浏览器或按后退按钮!

在 Linux 上:

这个解决方案好坏参半,适用于 Linux。简而言之:转储 Firefox 进程的内存,并在其中搜索文本片段。这很丑陋,但这是你最后的手段。

首先,使用gcore需要安装 gdb(GNU 调试器)的实用程序转储核心:

$ ps -e | grep firefox
 7089 ?        00:02:23 firefox
$ gcore 7089
[New Thread 0xa8ffeb70 (LWP 8924)]
[New Thread 0xb25feb70 (LWP 8531)]
[New Thread 0x9d7feb70 (LWP 8527)]
... snip ...
[New Thread 0xb5ffeb70 (LWP 7099)]
[New Thread 0xb67ffb70 (LWP 7098)]
[New Thread 0xb72f8b70 (LWP 7097)]
Saved corefile core.7089
Run Code Online (Sandbox Code Playgroud)

请注意,核心转储可能需要数百兆字节的磁盘空间。

如果成功了,您现在可以松一口气了。如果您的文本偶然在内存中徘徊,则它已在核心转储中捕获。

现在,试着记住你文章中的一个短语(例如,“一个深刻的影响”),并用grep它来看看它是否出现在文档中:

$ grep 'a profound effect' core.7089 
Binary file core.7089 matches
Run Code Online (Sandbox Code Playgroud)

如果你得到“二进制文件......匹配”,很好,它就在那里!如果没有,请尝试更多短语。如果你所有的grep尝试都产生了空的输出​​,那么你的文章可能永远消失了,你对此无能为力。(你可以试试grep -R 'a profound effect' ~/.mozilla,但我怀疑它会起作用)

假设您确实获得了匹配项,下一个任务将是切出包含您正在查找的文本的核心转储片段,并用于less直观地查看它:

$ grep -B 20 -A 20 -a 'a profound effect' core.7089 > /tmp/out
$ less /tmp/out
Run Code Online (Sandbox Code Playgroud)

(您可以省略第一行而只说less core.7089,但我发现less在搜索如此大的二进制文件时,内存使用量往往会激增。)

现在,键入/a profound effect,按回车键,等待并向下翻页,直到看到可识别的内容:

替代文字

砰! 如果您不喜欢此结果,请输入“n”查看是否还有其他结果。另外,请务必校对垃圾内容,以免最终发布:

我的头脑经常会产生用那种语言表达的想法。

我想它会像这样被破坏,因为保存你的文章片段的内存不再分配并被后续分配践踏。

在 Windows 上:

程序是一样的。首先,创建 Firefox 的核心转储。这可以在任务管理器中完成。在英语中,菜单项是Create Dump File

转储火狐核心

倾倒需要几秒钟。

核心转储位置

然后,使用像 http://mh-nexus.de/en/hxd/ 这样的十六进制编辑器打开转储,并搜索丢失的文本。

用于搜索转储的 HxD

  • 即使按下后退按钮,我也能在 Windows 上工作。鉴于由 Firefox 创建的许多进程,现在更加费力,但是在保存所有进程并使用工具(FAR 管理器)同时搜索多个编码后,它可以工作(在我的情况下,结果是 UTF-16 little endian)。 (3认同)