使用node&amp ;;从我自己的服务器提供任何外部网页。表达

时间:2018-03-04 16:22:18

标签: javascript html node.js express

我想允许用户操纵其他网页的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 响应发送回客户端。

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

实现什么应该是正确的?

1 个答案:

答案 0 :(得分:1)

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

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