首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保存带有链接和所有内容的网页的精确静态副本的算法,使其以原始的形式打开。

保存带有链接和所有内容的网页的精确静态副本的算法,使其以原始的形式打开。
EN

Stack Overflow用户
提问于 2014-02-27 15:55:46
回答 1查看 622关注 0票数 0

我正在尝试制作一个书签应用程序。我希望用户能够保存网页的特定部分。

我正在考虑保存一些坐标从原来的目标网页与其完整的静态副本。这样,当用户打开保存的副本时,他就会得到与选定部分的坐标完全相同的原始网页副本。我需要保存副本,因为网页上的内容会随着时间的推移而改变。

This有一点帮助。我在他们的网站上尝试了预邮件在线工具,但是它无法捕获重的js站点。我在后端使用node.js。

请引导我朝正确的方向走。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-27 16:17:36

让我们考虑一下这个问题的两种情况:

  1. 您希望只保存显式列出的文件。
  2. 您希望保存显式列表和隐式加载(即通过JS生成的URL+ AJAX)文件。

使用HTML解析器实现第一种情况非常简单。我不打算讨论这个问题,因为您提到了“重型js站点”,这似乎意味着您对第二个案例感兴趣。

@Bergi (关于这个问题的第一个评论)有一个正确的想法:加载页面,然后存储下载的所有内容。但是,您必须有某种方法将其作为静态HTML页面打开。这可以通过将所有AJAX调用重写为原始函数调用来实现。(剧透者:这是一种非常糟糕的方法)

例如:

代码语言:javascript
复制
$.get(url, data, callback);

需要转化为:

代码语言:javascript
复制
callback(response);

这不是一项琐碎的工作。JavaScript是一种非常灵活的语言。实现AJAX调用的方法太多了,因此以这样的方式重写JS是不可行的,因为这样的方式适用于所有JS代码。更糟糕的是,代码可能依赖于AJAX调用不立即返回(糟糕的表单和糟糕的想法,但这毕竟是互联网)。

如果您愿意离开独立的静态HTML解决方案,这个问题可以简化。您可以实现一个chrome或firefox扩展(或一个独立的应用程序),它将所有所需的数据保存到缓存中,然后--在加载保存的版本时--强制它从缓存中提取,或者使用伪造的XMLHttpRequest对象来防止查询远程服务器。您还可以在此环境中伪造日期/时间和其他外部状态变量。

我处理这个问题的方法是采用现有的可自定义呈现器(如Chrome、Firefox)并实现上面描述的扩展。

无论如何,我会认真地重新考虑这种解决办法的必要性。还能有更简单的东西(在浏览器中加载HTML图片地图链接的屏幕截图吗?)解决问题?我觉得这个问题可能不需要这么复杂的解决方案,但是对于你的问题并没有给出太多的细节,所以我很可能错了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22073659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档