正确的 html2canvas 代理脚本
Correct proxy script for html2canvas
我正在尝试让 html2render ( http://html2canvas.hertzen.com/ ) 在我的网站上运行。它适用于基本的东西 - 但 none 的图像显示(因为它们在 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!";
}
}
但是,它仍然不起作用:(关于代理的文档很少(none??)(除了告诉您在某些情况下需要它!)
谁能分享输出的数据应该是什么样子的?我试着根据上面的示例代码来解决这个问题,但是我的 PHP 有点生疏(而且我没有启用 PHP 和 Curl 的服务器,我可以在)
谢谢!
好吧,关于代理的答案不多——但我确实遇到了 post:
HTML2Canvas with CORS in S3 and CloudFront
在这里,显示了一个使用示例:
useCORS: true,
...所以我试过了:
html2canvas(document.body, {
useCORS: true,
onrendered: function(canvas) {
}
});
...而且有效!!!!
在我的例子中,我只是使用 domain.com 和 cdn.domain.com 作为 CDN。如果您使用其他第 3 方 CDN,您可能需要考虑启用 COR headers。
我正在尝试让 html2render ( http://html2canvas.hertzen.com/ ) 在我的网站上运行。它适用于基本的东西 - 但 none 的图像显示(因为它们在 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!";
}
}
但是,它仍然不起作用:(关于代理的文档很少(none??)(除了告诉您在某些情况下需要它!)
谁能分享输出的数据应该是什么样子的?我试着根据上面的示例代码来解决这个问题,但是我的 PHP 有点生疏(而且我没有启用 PHP 和 Curl 的服务器,我可以在)
谢谢!
好吧,关于代理的答案不多——但我确实遇到了 post:
HTML2Canvas with CORS in S3 and CloudFront
在这里,显示了一个使用示例:
useCORS: true,
...所以我试过了:
html2canvas(document.body, {
useCORS: true,
onrendered: function(canvas) {
}
});
...而且有效!!!!
在我的例子中,我只是使用 domain.com 和 cdn.domain.com 作为 CDN。如果您使用其他第 3 方 CDN,您可能需要考虑启用 COR headers。