57 lines
1.6 KiB
JavaScript
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);
|
|
});
|
|
|