- Notifications
You must be signed in to change notification settings - Fork49
A tiny, highly-customizable, single-function javascript/typescript library that captures a webpage and returns a new lightweight, self-contained HTML document. The library removes all external file dependencies while preserving the original appearance of the page. At only 12KB, it offers unparalleled speed and peerless reliability.
License
html-screen-capture-js/html-screen-capture-js
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
A tiny, highly-customizable, single-function javascript/typescript library that captures a webpage and returns a new lightweight, self-contained HTML document. The library removes all external file dependencies while preserving the original appearance of the page. At only 12KB, it offers unparalleled speed and peerless reliability.
This library can be used to:
- Create a web page screen capture "image", and display the "snapshot" (e.g. by using an iframe).
- Strip an html document from its external dependencies, as a step in a bigger process.
- Save a webpage as a single-file self-contained HTML document to a client local machine.
- Send a complete webpage content as a simple string to a remote server.
- Take multiple snapshots of a visitor's actions on a page for compliance purposes (e.g. sign up consents and the like).
License:
- Free (MIT).
Go to thedemo page and click the capture button
The code gets an HTML document as a parameter, and returns a new lightweight, self-contained HTMLdocument object that preserves the appearance of the original page. The newly generated document strips out allscripts; CSS classes/styles are replaced by new in-document classes; and allimage sources are replaced by inlined base64-encoded versions. The result is a single HTML documentthat looks like the original web page, but has no external dependencies like *.js, *.css, *.png, etc.It can easily be displayed, saved, archived or transferred. Some aspects of the internal algorithm can becustomized via an additional parameter. The source code is written in ES6, and transpiled to ES5.
You can get this library from these sources:
- html-screen-capture.js
- html-screen-capture.min.js
Leave feedback or report a bug
You are all welcome to join the adventure.
capture([outputType], [htmlDocument], [options]);
An optional enum-type parameter, specifying the desired output. If not specified (falsey) - output will be returned as an object.
- Valid values: 'object' | 'string'
An optional object-type parameter, specifying the HTML document to capture. If not specified (falsey) - window.document is used.
An optional object-type parameter. You can change any default option value by defining a similarlynamed property within the object. If not specified (falsey), or specified but defining only some ofthe properties, default values are used for all non-defined properties.
- Type: Array of strings
- Default: [ ] //an empty array
- CSS rules to add to the newly created HTML document.
- Type: Array of strings
- Default: [ 'script', 'link', 'style' ]
- Elements matching any of these CSS-style selectors will not be cloned to the newly created HTML document.
- Type: Object
- Default: { display: 'none' }
- Each property name is a css style property, and its value is a css style value. Elements with these definitions in their computed style will not be cloned to the newly created HTML document.
- Type: Array of strings
- Default: [ 'svg' ]
- Children of elements with these tag names will not undergo CSS class/style manipulations.
- Type: String
- Default: '_class'
- A non-existing HTML attribute name for saving the original element classes.
- Type: String
- Default: '_style'
- A non-existing HTML attribute name for saving the original element style.
- Type: String
- Default: 'c'
- The prefix to use for all newly created classes - the suffix is a number.
- Type: String
- Default: 'p'
- The prefix to use for all newly created pseudo classes - the suffix is a number.
- Type: String
- Default: 'image/png'
- The image format to use when images are replaced with base64 data. A valid value is any type supported by canvas.toDataURL().
- Type: Number
- Default: 0.92
- The image quality to use when images are replaced with base64 data; relevant only for some image formats.A valid value is any number between 0 and 1.
- Type: String
- Default: 'warn'
- Valid values: 'debug' | 'info' | 'warn' | 'error' | 'fatal' | 'off'
The returned value is a static HTML document in the format specified by the OutputTypeparameter supplied to the function. Valid options are below:
- "htmlScreenCaptureJs.OutputType.OBJECT"; the return value is an object. (Default)
- "htmlScreenCaptureJs.OutputType.STRING"; the return value is a string.
import { capture, OutputType } from'html-screen-capture-js';...const str = capture( OutputType.STRING, window.document, {});
import {capture, OutputType} from'html-screen-capture-js';...// capture the webpageconst htmlDocStr = capture(OutputType.STRING,window.document,{rulesToAddToDocStyle: ['@import url("https://fonts.googleapis.com/css?family=Roboto&display=swap")'],cssSelectorsOfIgnoredElements: ['.modal-dialog-backdrop','.modal-dialog--error' ]});// zip and convertconst jsZip = newJSZip();jsZip.file('screen-capture.html', htmlDocStr);const screenCaptureZipFile = await jsZip.generateAsync({type:'blob', compression:'DEFLATE'});const screenCaptureZipFileBase64 = await this.convertBlobToBase64(screenCaptureZipFile);// post to the server$.ajax({type:'POST',url: url,headers: headers,contentType:'application/json',dataType:'json',data: JSON.stringify({screenshot: screenCaptureZipFileBase64}),});
var str = htmlScreenCaptureJs.capture('string', window.document, {} );
If the library is missing a feature you need, you can help yourself:
// Set the outputtype parameter to OutputType.OBJECT (instead of the more common OutputType.STRING).const htmlDocObj = capture(OutputType.OBJECT, ..., ...);// Since thefunctionnow returns a DOM document object, you can further manipulate it via js..........// Once done, convert to a string.const htmlDocStr = htmlDocObj.outerHTML;// Continue as usual (sending the string to a server, etc.).........
Obviously, you can also create a new enhancement request type issuehere
About
A tiny, highly-customizable, single-function javascript/typescript library that captures a webpage and returns a new lightweight, self-contained HTML document. The library removes all external file dependencies while preserving the original appearance of the page. At only 12KB, it offers unparalleled speed and peerless reliability.
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.