Правильный скрипт прокси для html2canvas

Я пытаюсь заставить html2render ( http://html2canvas.hertzen.com/) работать на моем сайте. Это работает для основного материала - но ни одно из изображений не показывает (как они находятся на поддомене cdn.domain.com).

Я читал, и кажется, что он не любит другие домены из коробки. Я нашел пару скриптов 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, на котором я могу его протестировать)

Спасибо!

1 ответ

Решение

Хорошо, не так много ответов о прокси - но я наткнулся на пост:

HTML2Canvas с CORS в S3 и CloudFront

Здесь показан пример использования:

 useCORS: true,

... так что я попробовал это:

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

  }
});                    

... и это работает!!!!

В моем случае я просто использовал domain.com и cdn.domain.com в качестве CDN. Если вы используете CDN других сторонних производителей, вам может понадобиться включить заголовки CORs.

Другие вопросы по тегам