正确的代理脚本html2canvas



我试图得到html2render (http://html2canvas.hertzen.com/)在我的网站上工作。它适用于基本的东西-但没有图像显示(因为它们在cdn.domain.com子域上)。

我一直在阅读,它似乎不像其他的域开箱即用。我找到了几个PHP代理脚本:

  • https://github.com/brcontainer/html2canvas-php-proxy
  • https://github.com/adjdred/html2canvas-proxy-php

我试着把它们打开,但是我们没有在这个服务器上启用curl。所以,我要求助于用Perl写一些东西。

这是我到目前为止得到的:

use MIME::Base64;
use File::Slurp;
handle();
sub handle {
    print ('Access-Control-Max-Age:' . 5 * 60 * 1000);
    print ("Access-Control-Allow-Origin: *");
    print ('Access-Control-Request-Method: *');
    print ('Access-Control-Allow-Methods: OPTIONS, GET');
    print ('Access-Control-Allow-Headers *');
    print ("Content-Type: application/javascript");
    #print $IN->header;
    my $url = $IN->param('url');
    $url =~ s|https://cdn.xxx.net|/srv/www/xxx.net/www|g;
    if (-e $url) {
        my $file = read_file($url);
        use JSON;
        my $mime_type;
        if ($url =~ /.jpe?g$/i) {
            $mime_type = "image/jpg"
        } elsif ($url =~ /.png$/i) {
            $mime_type = "image/png"
        }
        print JSON::encode_json([{
            "pathinfo" => $url,
            "error" => undef,
            "data" => encode_base64($file),
            "mime_type" => $mime_type
        }]);
    } else {
        print "ACK!";
    }
}

然而,它仍然不起作用:(关于代理的文档很少(没有?? ?)(除了告诉您在某些情况下需要它!)

谁能分享输出的数据应该是什么样子?我试着根据上面的示例代码来解决这个问题,但是我的PHP有点生疏(而且我没有一个启用PHP和Curl的服务器,我可以在上面进行测试)

谢谢!

好吧,没有太多关于代理的答案-但我确实看到了一个帖子:

HTML2Canvas与CORS在S3和CloudFront

在这里,它显示了一个使用的例子:

 useCORS: true,

…所以我试了:

html2canvas(document.body, {
  useCORS: true,
  onrendered: function(canvas) {
  }
});                    

…这是可行的!!!!

在我的例子中,我只是使用domain.com和cdn.domain.com作为CDN。如果您正在使用其他第三方CDN,您可能需要考虑启用CORs头。

最新更新