【问题标题】:Serve any external web page from my own server using node & express使用 node & express 从我自己的服务器上提供任何外部网页
【发布时间】:2018-03-04 16:22:18
【问题描述】:

我想让用户操纵另一个网页的 DOM(比如 www.google.com)。

显然,我并没有任何意图实际更改原始网页上的任何内容,而只是允许视觉更改,看起来好像它们在该网站上。

我开始使用iframe,但没有办法为跨域iframe 操作DOM。因此,我考虑从我自己的服务器和我自己的域提供该网页,这样就不会有任何跨域问题。

这是我在服务器上得到的:

app.get('/showsite', (req, res) => {
  const url = 'https://www.google.com';
  request(url, (err, resp, html) => {
    if (!err) {
        res.send(html);
    }
})}

我在这里所做的实际上是使用 GET 请求接收网页,然后 将 html 响应发送回客户端。

网页确实显示给客户端,但是页面全乱了 - 相对路径错误,样式,编码等。

正确的实现应该是什么?

【问题讨论】:

  • 网页不仅仅是 html。加载了大量资源,为每个网站提供了自己的风格和功能。
  • 当然可以,但是它们是从 index.html 文件中导入的。无论哪种方式,我都知道可以做我想做的事(我在几个网站上看到过这种行为),只是不确定正确的实现

标签: javascript html node.js express


【解决方案1】:

只要您能够提取并托管构成该网站的所有资产,就可以抓取第三方网站、更改和重新显示其内容。在您的情况下,google.com 登录页面有许多图像需要检索,然后从您自己域中的服务器提供。

  1. 您需要使用jsdom 之类的工具来抓取和遍历目标网站的所有子资产。
  2. 使用jsdom 之类的工具下载所有子资源,您需要将所有这些资源复制并保存在本地服务器上。您保存它们的目录路径必须与原始路径完全匹配。
  3. 拥有所有子资源(css、图像、脚本、字体)后,您就可以操作原始 html 并提供新内容。

【讨论】:

  • 感谢您的回答,但我想知道为什么我必须保存所有这些。似乎没有相对路径的图像和脚本确实会加载,所以不能只更改 html 本身的相对路径来获取它们吗?
猜你喜欢
  • 1970-01-01
  • 2018-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-11
  • 2015-12-16
  • 2023-03-07
  • 1970-01-01
相关资源
最近更新 更多