Tech
News
Videos
Forums
Jobs
Books
Events
More
Interviews
Live
Learn
Training
Career
Members
Blogs
Challenges
Certification
Contribute
Article
Blog
Video
Ebook
Interview Question
Collapse
Feed
Dashboard
Wallet
Learn
Achievements
Network
Refer
Rewards
SharpGPT
Premium
Contribute
Article
Blog
Video
Ebook
Interview Question
Register
Login
Generate Screenshot Using HTML and JavaScript
WhatsApp
Sibeesh Venu
4y
113.7k
0
4
100
Article
Introduction
Generate a screenshot using HTML and JavaScript, yeah that is what I meant. I was just searching for some unanswered article here, one member was asking about this, so I thought I would write a tip about that. Here it is, you can see the actual article reference
here
.
Procedure
Step 1
You need an HTML page with some JavaScript code and CSS. That's all we need.
Create an HTML file just like this:
<html lang=
"en"
>
<head>
<title>Take Web Page Screenshot
with
HTML5 and JavaScript </title>
</head>
<body>
<a
class
=
"btn btn-success"
href=
"javascript:void(0);"
onclick=
"generate();"
>Generate
Screenshot »</a>
</body>
</html>
Step 2
If you want, you can create some styles and apply them.
Now it's time to create the JavaScript function generate() that I specified in an <a> tag.
<script type=
"text/javascript"
>
(
function
(exports) {
function
urlsToAbsolute(nodeList) {
if
(!nodeList.length) {
return
[];
}
var
attrName =
'href'
;
if
(nodeList[0].__proto__ === HTMLImageElement.prototype || nodeList[0].__proto__ ===
HTMLScriptElement.prototype) {
attrName =
'src'
;
}
nodeList = [].map.call(nodeList,
function
(el, i) {
var
attr = el.getAttribute(attrName);
if
(!attr) {
return
;
}
var
absURL = /^(https?|data):/i.test(attr);
if
(absURL) {
return
el;
}
else
{
return
el;
}
});
return
nodeList;
}
function
screenshotPage() {
urlsToAbsolute(document.images);
urlsToAbsolute(document.querySelectorAll(
"link[rel='stylesheet']"
));
var
screenshot = document.documentElement.cloneNode(
true
);
var
b = document.createElement(
'base'
);
b.href = document.location.protocol +
'//'
+ location.host;
var
head = screenshot.querySelector(
'head'
);
head.insertBefore(b, head.firstChild);
screenshot.style.pointerEvents =
'none'
;
screenshot.style.overflow =
'hidden'
;
screenshot.style.webkitUserSelect =
'none'
;
screenshot.style.mozUserSelect =
'none'
;
screenshot.style.msUserSelect =
'none'
;
screenshot.style.oUserSelect =
'none'
;
screenshot.style.userSelect =
'none'
;
screenshot.dataset.scrollX = window.scrollX;
screenshot.dataset.scrollY = window.scrollY;
var
script = document.createElement(
'script'
);
script.textContent =
'('
+ addOnPageLoad_.toString() +
')();'
;
screenshot.querySelector(
'body'
).appendChild(script);
var
blob =
new
Blob([screenshot.outerHTML], {
type:
'text/html'
});
return
blob;
}
function
addOnPageLoad_() {
window.addEventListener(
'DOMContentLoaded'
,
function
(e) {
var
scrollX = document.documentElement.dataset.scrollX || 0;
var
scrollY = document.documentElement.dataset.scrollY || 0;
window.scrollTo(scrollX, scrollY);
});
}
function
generate() {
window.URL = window.URL || window.webkitURL;
window.open(window.URL.createObjectURL(screenshotPage()));
}
exports.screenshotPage = screenshotPage;
exports.generate = generate;
})(window);
</script>
Complete Code
Screenshot.html
<
html
lang
=
"en"
>
<
head
>
<
title
>
Take Web Page Screenshot with HTML5 and JavaScript
</
title
>
</
head
>
<
body
>
<
a
class
=
"btn btn-success"
href
=
"javascript:void(0);"
onclick
=
"generate();"
>
Generate
Screenshot »
</
a
>
<
script
type
=
"text/javascript"
>
(function (exports) {
function urlsToAbsolute(nodeList) {
if (!nodeList.length) {
return [];
}
var
attrName
=
'href'
;
if (nodeList[0]
.__proto__
=== HTMLImageElement.prototype || nodeList[0].__p
roto__
=== HTMLScriptElement.prototype) {
attrName
=
'src'
;
}
nodeList
= [].map.call(nodeList, function (el, i) {
var
attr
=
el
.getAttribute(attrName);
if (!attr) {
return;
}
var
absURL
= /^(https?|data):/i.test(attr);
if (absURL) {
return el;
} else {
return el;
}
});
return nodeList;
}
function screenshotPage() {
urlsToAbsolute(document.images);
urlsToAbsolute(document.querySelectorAll("link[
rel
=
'stylesheet'
]"));
var
screenshot
=
document
.documentElement.cloneNode(true);
var
b
=
document
.createElement('base');
b.href
=
document
.location.protocol + '//' + location.host;
var
head
=
screenshot
.querySelector('head');
head.insertBefore(b, head.firstChild);
screenshot.style.pointerEvents
=
'none'
;
screenshot.style.overflow
=
'hidden'
;
screenshot.style.webkitUserSelect
=
'none'
;
screenshot.style.mozUserSelect
=
'none'
;
screenshot.style.msUserSelect
=
'none'
;
screenshot.style.oUserSelect
=
'none'
;
screenshot.style.userSelect
=
'none'
;
screenshot.dataset.scrollX
=
window
.scrollX;
screenshot.dataset.scrollY
=
window
.scrollY;
var
script
=
document
.createElement('script');
script.textContent
=
'('
+ addOnPageLoad_.toString() + ')();';
screenshot.querySelector('body').appendChild(script);
var
blob
=
new
Blob([screenshot.outerHTML], {
type: 'text/html'
});
return blob;
}
function addOnPageLoad_() {
window.addEventListener('DOMContentLoaded', function (e) {
var
scrollX
=
document
.documentElement.dataset.scrollX || 0;
var
scrollY
=
document
.documentElement.dataset.scrollY || 0;
window.scrollTo(scrollX, scrollY);
});
}
function generate() {
window
window.URL
= window.URL || window.webkitURL;
window.open(window.URL.createObjectURL(screenshotPage()));
}
exports.screenshotPage
= screenshotPage;
exports.generate
= generate;
})(window);
</
script
>
</
body
>
</
html
>
CSS
HTML
JavaScript
Screenshot using HTML
Up Next
Ebook Download
View all
Frontend Developer Interview Questions and Answers
Read by 991 people
Download Now!
Learn
View all
Membership not found