Javascript 一种算法,用于保存包含链接和所有内容的网页的精确静态副本,以便将其作为原始文件打开
我正在尝试制作一个书签应用程序。我希望用户能够保存网页的特定部分 我正在考虑用完整的静态副本保存原始目标网页的一些坐标。因此,当用户打开保存的副本时,他将获得原始网页的精确副本以及所选部分的坐标。我需要保存副本,因为网页上的内容会随着时间的推移而改变 有点帮助。我在他们的网站上试用了premailer在线工具,但它无法捕获繁重的js站点。我在后端使用node.jsJavascript 一种算法,用于保存包含链接和所有内容的网页的精确静态副本,以便将其作为原始文件打开,javascript,html,node.js,Javascript,Html,Node.js,我正在尝试制作一个书签应用程序。我希望用户能够保存网页的特定部分 我正在考虑用完整的静态副本保存原始目标网页的一些坐标。因此,当用户打开保存的副本时,他将获得原始网页的精确副本以及所选部分的坐标。我需要保存副本,因为网页上的内容会随着时间的推移而改变 有点帮助。我在他们的网站上试用了premailer在线工具,但它无法捕获繁重的js站点。我在后端使用node.js 请给我指引正确的方向。谢谢
请给我指引正确的方向。谢谢让我们考虑这个问题的两个例子:
$.get(url, data, callback);
需要转化为:
callback(response);
这不是一件小事。JavaScript是一种非常灵活的语言。实现AJAX调用的方法太多了,因此用一种适用于所有JS代码的方式重写JS是不可行的。更糟糕的是,代码可能依赖于AJAX调用,而不是立即返回(糟糕的形式和糟糕的想法,但这毕竟是互联网)
如果您愿意放弃独立的静态HTML解决方案,那么问题可以简化。您可以实现一个chrome或firefox扩展(或独立应用程序),将所有必需的数据保存到缓存中,然后在加载保存的版本时,强制将其从缓存中取出,或者使用伪造的XMLHttpRequest
对象来阻止查询远程服务器。您还可以在此环境中伪造日期/时间和其他外部状态变量
我处理这个问题的方法是采用现有的可定制渲染器(如Chrome、Firefox)并实现如上所述的扩展
无论如何,我会认真地重新考虑这样一个解决方案的必要性。用更简单的方法(在浏览器中加载HTML图像地图链接的屏幕截图)可以解决这个问题吗?我觉得这个问题可能不需要这么复杂的解决方案,但是没有给出关于你的问题的很多细节,所以我可能是错的。尝试使用phantomjs加载页面。如果需要精确的副本,您可以捕获并存储所有请求的资源。但是,当“重新加载”副本时,您可能还需要伪造当前时间,以及可能已发生变化的其他一些全局条件。我不会尝试存储动态(重js)“精确副本”-在“重播时间”有太多可能出错的方法。我会尝试在建议的坐标处提取DOM,并且只存储它(可能包括css和图像)。谢谢Bergi。但是现在大多数网站都使用了很多js。忽略这一点不会让这个应用成为未来的证明。我没说你应该忽略它。但是,对于“静态副本”,您不需要存储页面时页面中的交互性,是吗?您只需要快照“当前状态”。或者,你的“书签应用程序”到底应该用于什么目的呢?小心版权问题谢谢,这很有帮助。Chrome和firefox扩展将使从网页中收集数据变得更容易,以便再次显示。你能给我一些我应该研究的技术术语吗。Evernote做到了。我正在寻找类似的技术。不,你不应该试图重写js-那只会出错。相反,伪造/模拟底层API(即js环境中的
XMLHttpRequest
,甚至浏览器中的HTTP堆栈(如果您有权访问该堆栈)。@Bergi:您会注意到,我建议不要这样做。我把它提出来,然后把它击落,因为它会在某个时候被建议。最好是用一些理由来说明为什么要避免这样做。假装XMLHttpRequest
或多或少是我建议的,尽管你的措辞更好。好吧,但也许你应该将“这意味着将所有AJAX调用重写为原始函数调用。”改为类似“这可以通过…”的内容。我发现了一个名为SingleFile的chrome扩展名,它将页面另存为.html文件。我会调查的。谢谢你的提示。