没有不值得去解决的问题,也没有不值得去学习的技术!

How to Fix html2canvas Screenshot Failures Across Second-Level Domains

The screenshot is successful, and the issue of html2canvas failing to capture screenshots across second-level domains is resolved

1. The image in the red box on the web page is called from a cross second-level domain, as shown in Figure 1.

The image in the red box on the web page is called from a cross second-level domain
Figure 1

2. In the web page source code, the image address in the red box is a second-level domain relative to the current web page address, as shown in Figure 2.

In the web page source code, the image address in the red box is a second-level domain relative to the current web page address
Figure 2

3. In the screenshot taken using html2canvas, the team logo has disappeared, as shown in Figure 3.

In the screenshot taken using html2canvas, the team logo has disappeared
Figure 3

4. Access http://backend.kaiqiu_shujujiexi_api.dev/team_logo/GZHOU.png, and the response is shown in Figure 4.

Access http://backend.kaiqiu_shujujiexi_api.dev/team_logo/GZHOU.png, and the response
Figure 4

5. Since the image server is Nginx, configure it to allow cross-origin access and restart Nginx, as shown in Figure 5.

Find the server block in nginx.conf and add the following configuration inside it:
add_header Access-Control-Allow-Origin *;

Since the image server is Nginx, configure it to allow cross-origin access and restart Nginx
Figure 5

6. Access http://backend.kaiqiu_shujujiexi_api.dev/team_logo/GZHOU.png again, and the response is shown in Figure 6.

Access http://backend.kaiqiu_shujujiexi_api.dev/team_logo/GZHOU.png again, and the response
Figure 6

7. Add two lines to the JS screenshot code: allowTaint: true, useCORS: true, as shown in Figure 7.

Add one line to the JS screenshot code: useCORS: true
Figure 7

8. The screenshot is successful, and the issue of html2canvas failing to capture screenshots across second-level domains is resolved, as shown in Figure 8.

The screenshot is successful, and the issue of html2canvas failing to capture screenshots across second-level domains is resolved
Figure 8

9. This solution also works for cross top-level domains, as shown in Figure 9.

This solution also works for cross top-level domains
Figure 9

关于作者 · 持续学习与技术实践

我是一名拥有 15 年以上开发经验的技术从业者,自 2013 年起持续运营个人技术博客,记录工作与个人项目中遇到的真实问题,以及解决问题过程中的探索、实践和思考。

除了技术写作,我也在持续开发和维护自己的独立项目,探索新技术和新工具在实际场景中的应用。我始终相信,没有不值得去解决的问题,也没有不值得去学习的技术。

如果这篇文章对你有所帮助,欢迎浏览博客中的其他文章,也欢迎交流技术经验与想法。

关于我  ·  GitHub  ·  邮件联系