Я разрабатываю стартовую страницу, где пользователи могут добавлять ссылки на страницу, используя формуляры. Они могут добавить имя , URL , описание и загрузить изображение .
Я хочу автоматизировать процесс загрузки изображения, изображение должно быть снято автоматически. Мой скрипт должен делать скриншот сайта, который пользователь ввел в url . Я знаю, что могу сделать скриншоты html-элементов, используя html2canvas .
Подход 1
Мой первый подход состоял в том, чтобы загрузить внешний веб-сайт в iframe, но это не работает, потому что некоторые страницы ограничивают это, например. даже учебник iframe на w3schools.com не работает, и я получаю Refused to display 'https://www.w3schools.com/' in a frame because it set 'X-Frame-Options' to 'sameorigin'.
HTML
<div id="capture" style="padding: 10px; color: black;">
<iframe src="https://www.w3schools.com"></iframe>
</div>
Подход 2
Мой следующий подход состоял в том, чтобы позвонить на мой веб-сервер, который загружает целевой веб-сайт и возвращает HTML клиенту. Это работает, но целевой сайт не отображается должным образом, например, изображения не загружаются. (см. скриншот ниже)
HTML
<div id="capture" style="padding: 10px; color: black;"></div>
JS
var testURL = "http://www.google.de";
$.ajax({
url: "http://server/ajax.php",
method: "POST",
data: { url: testURL},
success: function(response) {
$("#capture").html(response);
console.log(response);
html2canvas(document.querySelector("#capture")).then(
canvas => {
document.body.appendChild(canvas);
}
);
}
});
PHP
if (!empty($_POST['url'])) {
$url = filter_input(INPUT_POST, "url");
}
$c = curl_init($url);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
//curl_setopt(... other options you want...)
$html = curl_exec($c);
if (curl_error($c))
die(curl_error($c));
// Get the status code
$status = curl_getinfo($c, CURLINFO_HTTP_CODE);
curl_close($c);
echo $html;
Можно ли этого добиться?
Обновление
Мне удалось загрузить некоторые изображения, изменив мой ajax, но они не отображаются html2canvas .??
var testURL = "http://www.google.de";
$.ajax({
url: "http://server/ajax.php",
method: "POST",
data: { url: testURL},
success: function(response) {
response = response.replace(/href="\//g, 'href="'+testURL +"/");
response = response.replace(/src="\//g, 'src="'+testURL +"/");
response = response.replace(/content="\//g, 'content="'+testURL +"/");
$("#capture").html(response);
console.log(response);
html2canvas(document.querySelector("#capture")).then(
canvas => {
document.body.appendChild(canvas);
}
);
}
});
Результат
Результат Холст