diff --git a/client/modules/IDE/components/PreviewFrame.js b/client/modules/IDE/components/PreviewFrame.js index a7fd872a..a62e7127 100644 --- a/client/modules/IDE/components/PreviewFrame.js +++ b/client/modules/IDE/components/PreviewFrame.js @@ -3,55 +3,100 @@ import ReactDOM from 'react-dom'; import escapeStringRegexp from 'escape-string-regexp'; import srcDoc from 'srcdoc-polyfill'; -const hijackConsoleScript = ``; + `; + return s; +} class PreviewFrame extends React.Component { @@ -95,6 +140,7 @@ class PreviewFrame extends React.Component { injectLocalFiles() { let htmlFile = this.props.htmlFile.content; + let scriptOffs = []; // have to build the array manually because the spread operator is only // one level down... @@ -102,9 +148,10 @@ class PreviewFrame extends React.Component { this.props.jsFiles.forEach(jsFile => { const newJSFile = { ...jsFile }; let jsFileStrings = newJSFile.content.match(/(['"])((\\\1|.)*?)\1/gm); + const jsFileRegex = /^('|")(?!(http:\/\/|https:\/\/)).*\.(png|jpg|jpeg|gif|bmp|mp3|wav|aiff|ogg|json)('|")$/i; jsFileStrings = jsFileStrings || []; jsFileStrings.forEach(jsFileString => { - if (jsFileString.match(/^('|")(?!(http:\/\/|https:\/\/)).*\.(png|jpg|jpeg|gif|bmp|mp3|wav|aiff|ogg|json)('|")$/i)) { + if (jsFileString.match(jsFileRegex)) { const filePath = jsFileString.substr(1, jsFileString.length - 2); let fileName = filePath; if (fileName.match(/^\.\//)) { @@ -125,7 +172,8 @@ class PreviewFrame extends React.Component { jsFiles.forEach(jsFile => { const fileName = escapeStringRegexp(jsFile.name); const fileRegex = new RegExp(`([\s\S]*?)<\/script>`, 'gmi'); - htmlFile = htmlFile.replace(fileRegex, ``); + const replacementString = ``; + htmlFile = htmlFile.replace(fileRegex, replacementString); }); this.props.cssFiles.forEach(cssFile => { @@ -146,7 +194,8 @@ class PreviewFrame extends React.Component { htmlFile = htmlFile.replace(/(?:)([\s\S]*?)(?:<\/head>)/gmi, `\n${htmlHeadContents}\n`); } - htmlFile += hijackConsoleScript; + scriptOffs = getAllScriptOffsets(htmlFile); + htmlFile += hijackConsoleScript(JSON.stringify(scriptOffs)); return htmlFile; }