mirror of
https://github.com/niklasvh/html2canvas.git
synced 2023-08-10 21:13:10 +03:00
49 lines
1.7 KiB
JavaScript
49 lines
1.7 KiB
JavaScript
function Proxy(src, proxyUrl, document) {
|
|
var callback = createCallback(supportsCORS);
|
|
var url = createProxyUrl(proxyUrl, src, callback);
|
|
|
|
return supportsCORS ? XHR(url) : (jsonp(document, url, callback).then(function(response) {
|
|
return decode64(response.content);
|
|
}));
|
|
}
|
|
var proxyCount = 0;
|
|
|
|
var supportsCORS = ('withCredentials' in new XMLHttpRequest());
|
|
var supportsCORSImage = ('crossOrigin' in new Image());
|
|
|
|
function ProxyURL(src, proxyUrl, document) {
|
|
var callback = createCallback(supportsCORSImage);
|
|
var url = createProxyUrl(proxyUrl, src, callback);
|
|
return (supportsCORSImage ? Promise.resolve(url) : jsonp(document, url, callback).then(function(response) {
|
|
return "data:" + response.type + ";base64," + response.content;
|
|
}));
|
|
}
|
|
|
|
function jsonp(document, url, callback) {
|
|
return new Promise(function(resolve, reject) {
|
|
var s = document.createElement("script");
|
|
var cleanup = function() {
|
|
delete window.html2canvas.proxy[callback];
|
|
document.body.removeChild(s);
|
|
};
|
|
window.html2canvas.proxy[callback] = function(response) {
|
|
cleanup();
|
|
resolve(response);
|
|
};
|
|
s.src = url;
|
|
s.onerror = function(e) {
|
|
cleanup();
|
|
reject(e);
|
|
};
|
|
document.body.appendChild(s);
|
|
});
|
|
}
|
|
|
|
function createCallback(useCORS) {
|
|
return !useCORS ? "html2canvas_" + Date.now() + "_" + (++proxyCount) + "_" + Math.round(Math.random() * 100000) : "";
|
|
}
|
|
|
|
function createProxyUrl(proxyUrl, src, callback) {
|
|
return proxyUrl + "?url=" + encodeURIComponent(src) + (callback.length ? "&callback=html2canvas.proxy." + callback : "");
|
|
}
|