Files
freeCodeCamp/public/js/lib/jailed/_frame.js
2016-04-02 23:52:52 -04:00

57 lines
1.6 KiB
JavaScript

/**
* Contains the code executed in the sandboxed frame under web-browser
*
* Creates a Web-Worker inside the frame, sets up the communication
* between the worker and the parent window
*/
var scripts = document.getElementsByTagName('script');
var __jailed__path__ = scripts[scripts.length-1].src
.split('?')[0]
.split('/')
.slice(0, -1)
.join('/') + '/';
// creating worker as a blob enables import of local files
var blobCode = [
' self.addEventListener("message", function(m){ ',
' if (m.data.type == "initImport") { ',
' importScripts(m.data.url); ',
' self.postMessage({type: "initialized"}); ',
' } ',
' }); '
].join('\n');
var blobUrl;
try {
blobUrl = new Blob([blobCode], {type: 'application/javascript'});
} catch (e) {
window.BlobBuilder = window.BlobBuilder
|| window.WebKitBlobBuilder
|| window.MozBlobBuilder;
blobUrl = new BlobBuilder();
blobUrl.append(blobCode);
blobUrl = blobUrl.getBlob();
}
var worker = new Worker(URL.createObjectURL(blobUrl));
// telling worker to load _pluginWeb.js (see blob code above)
worker.postMessage({
type: 'initImport',
url: __jailed__path__ + '_pluginWeb.js'
});
// forwarding messages between the worker and parent window
worker.addEventListener('message', function(m) {
parent.postMessage(m.data, '*');
});
window.addEventListener('message', function(m) {
worker.postMessage(m.data);
});