UNPKG

react-safe-src-doc-iframe

Version:

A component which applies guards to srcdoc iframes, providing a predictable and safe experience to the user.

1 lines 4.54 kB
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("prop-types")):"function"==typeof define&&define.amd?define(["react","prop-types"],t):"object"==typeof exports?exports.SafeSrcDocIframe=t(require("react"),require("prop-types")):e.SafeSrcDocIframe=t(e.React,e.PropTypes)}(window,function(e,t){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},o=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var r=[],n=!0,o=!1,i=void 0;try{for(var a,u=e[Symbol.iterator]();!(n=(a=u.next()).done)&&(r.push(a.value),!t||r.length!==t);n=!0);}catch(e){o=!0,i=e}finally{try{!n&&u.return&&u.return()}finally{if(o)throw i}}return r}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),i=function(){function e(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,r,n){return r&&e(t.prototype,r),n&&e(t,n),t}}(),a=r(1),u=c(a),l=c(r(2));function c(e){return e&&e.__esModule?e:{default:e}}var f="\n *[href], button, img {\n pointer-events: none !important;\n display: inline-block !important;\n }\n",s=function(e){function t(){var e;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);for(var r=arguments.length,n=Array(r),o=0;o<r;o++)n[o]=arguments[o];var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(n)));return i.iframeElement=null,i.disableStyleTag=document.createElement("style"),i.disableStylesTextNode=document.createTextNode(f),i.disableStyleTag.appendChild(i.disableStylesTextNode),i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,a.Component),i(t,[{key:"componentDidMount",value:function(){var e=this;this.iframeElement&&(this.iframeElement.onload=function(){e.applySafeguards()})}},{key:"componentWillUnmount",value:function(){this.disableStylesTextNode=null,this.disableStyleTag=null}},{key:"applySafeguards",value:function(){if(this.iframeElement.contentDocument){var e=this.iframeElement.contentDocument.getElementsByTagName("body"),t=o(e,1)[0];t&&t.appendChild(this.disableStyleTag)}}},{key:"render",value:function(){var e=this,t=this.props,r=t.title,o=t.referrerPolicy,i=t.sandbox,a=t.srcDoc,l=(t.src,function(e,t){var r={};for(var n in e)t.indexOf(n)>=0||Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r}(t,["title","referrerPolicy","sandbox","srcDoc","src"]));return u.default.createElement("iframe",n({title:r,srcDoc:a,referrerPolicy:o,sandbox:i,ref:function(t){e.iframeElement=t}},l))}}]),t}();s.propTypes={title:l.default.string.isRequired,srcDoc:l.default.string.isRequired,sandbox:l.default.string,referrerPolicy:l.default.string,src:l.default.string},s.defaultProps={sandbox:"allow-same-origin",referrerPolicy:"no-referrer",src:""},t.default=s},function(t,r){t.exports=e},function(e,r){e.exports=t}])});