|
1 | 1 | import castArray from 'lodash/castArray'; |
2 | 2 | import pick from 'lodash/pick'; |
| 3 | +import base64 from 'base64-js'; |
3 | 4 | import loopBreaker from 'loop-breaker'; |
4 | 5 | import libraries from '../config/libraries'; |
5 | 6 | import previewFrameLibraries from '../config/previewFrameLibraries'; |
6 | 7 |
|
| 8 | +const textEncoder = new TextEncoder('utf-8'); |
7 | 9 | const parser = new DOMParser(); |
8 | 10 |
|
9 | 11 | const sourceDelimiter = '/*__POPCODESTART__*/'; |
@@ -183,15 +185,18 @@ class PreviewGenerator { |
183 | 185 | _attachCssLibrary(css) { |
184 | 186 | const linkTag = this.previewDocument.createElement('link'); |
185 | 187 | linkTag.rel = 'stylesheet'; |
186 | | - linkTag.innerHTML = css; |
187 | | - this._previewHead.insertBefore(linkTag, this._previewHead.firstChild); |
| 188 | + |
| 189 | + const base64encoded = base64.fromByteArray(textEncoder.encode(css)); |
| 190 | + linkTag.href = `data:text/css;charset=utf-8;base64,${base64encoded}`; |
| 191 | + this._previewHead.appendChild(linkTag); |
188 | 192 | } |
189 | 193 |
|
190 | 194 | _attachJavascriptLibrary(javascript) { |
191 | 195 | const scriptTag = this.previewDocument.createElement('script'); |
192 | | - const javascriptText = String(javascript); |
193 | | - scriptTag.innerHTML = javascriptText.replace(/<\/script>/g, '<\\/script>'); |
194 | | - this._previewHead.insertBefore(scriptTag, this._previewHead.firstChild); |
| 196 | + const base64encoded = base64.fromByteArray(textEncoder.encode(javascript)); |
| 197 | + scriptTag.src = |
| 198 | + `data:text/javascript;charset=utf-8;base64,${base64encoded}`; |
| 199 | + this.previewBody.appendChild(scriptTag); |
195 | 200 | } |
196 | 201 | } |
197 | 202 |
|
|
0 commit comments