javascript - 如何通过 Chrome 扩展程序保存网页的完整状态?

标签 javascript google-chrome google-chrome-extension save

页面的状态应该如何保存?

例如,考虑用户正在浏览各种网页,其中一些可能是这样编码的:

onload=function(){
    let d_s = document.getElementById('d').style;
    d_s.width = d_s.height = Math.random() * 500 + 'px';
    setTimeout(onload, 800 + Math.random() * 800);
};
<div id=d style=background:skyblue;></div>
<!-- click Run ↓ -->


我想保存选定选项卡(整个选项卡 session )的当前状态并在将来恢复它们。

有哪些技术可以做到这一点?

(这应该是可能的。毕竟,我们可以将一个选项卡从一个 Chrome 窗口拖到下一个窗口,即使在播放视频时,状态也不会发生任何变化。)

最佳答案

简而言之,没有。

这是令人难以置信的雄心勃勃,因为您不仅必须存储初始 DOM 状态(可以通过页面脚本加载随时更改),而且还必须存储本地存储、cookie、 session 、图像等 Assets 的状态、脚本、样式表,不胜枚举。

如果您能够拍摄内存的低级别快照,将其存储在某个地方,然后稍后将其恢复到内存中,您可能会有机会,因为这就是休眠正在做的事情。但是,Chrome 或任何浏览器中都不存在这样的 API。

甚至在任何技术挑战之前,这将导致您在安装扩展程序以访问所有各种 API 时必须请求大量权限。

其次,假设您确实想出了序列化页面所有这些方面的方法,您将在哪里存储休眠状态?您最好的选择是后台页面上的本地存储,但这通常有大小限制。

第三,您需要实际浏览到该页面,以便正确设置 URL。如果没有这一步,网页看起来只会从休眠中恢复,但如果用户尝试执行任何操作,他们将受到跨站点脚本 (XSS) 警告的攻击,并且刷新页面只会返回到空白选项卡.

最后,您一定会遇到由您无法预测的特定于站点的细微差别带来的几乎无限数量的边缘情况。

关于javascript - 如何通过 Chrome 扩展程序保存网页的完整状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41158193/

相关文章:

javascript - 从条形图中删除填充 Highcharts.js

javascript - Chrome 扩展程序 - 不保存数据

javascript - 如何从与后台页面中JS变量相同的文件夹中的文件中获取数据?

sockets - 使用Chrome应用程序套接字API检测远程计算机上的端口是否打开

javascript - Javascript/HTML:如何在选择时弹出小界面

javascript - 获取chrome扩展中的所有链接

javascript - Mozilla扩展:多个选项卡之间的多个状态

javascript - Puppeteer - 自定义字体未加载到 pdf 中,但确实出现在屏幕截图中

javascript - 无法解析React Firebase对象中的数据

javascript - 选项内的标题标签(chrome)