1- const appendScriptTag = ( url , code ) => {
1+
2+ const appendScriptTag = ( url , code , id ) => {
23 const ns = document . createElement ( 'script' )
3- ns . setAttribute ( 'class' , 'sdpmodulescriptcontainer' )
4+ ns . setAttribute ( 'class' , 'sdpmodulescriptcontainer' + id )
45 ns . setAttribute ( 'type' , 'module' )
56 ns . setAttribute ( 'async' , '' )
67 ns . innerHTML = code
@@ -9,41 +10,47 @@ const appendScriptTag = (url, code) => {
910}
1011
1112const script = function ( element , mod , config ) {
12- if ( config . _mode === 'preview' ) return
13+ if ( ! mod . forceRun && config . _mode === 'preview' ) return
1314 if ( config . contextType !== 'scene' ) return
1415
16+ const id = '_JSMOD_' + parseInt ( Math . random ( ) * 10000 )
17+ const that = this
18+
19+ this . destroy = ( ) => {
20+ const prev = [ ...document . querySelectorAll ( '.sdpmodulescriptcontainer' + id ) ]
21+ prev . forEach ( d => document . body . removeChild ( d ) )
22+ }
23+
1524 return new Promise ( ( resolve , reject ) => {
1625 const blink = { }
1726 config . blocks . forEach ( b => {
1827 blink [ b . ukey ] = b
1928 } )
2029 blink . _otherParams = config . otherParams
21- window . _sdpconfigobject = blink
30+ window [ ' _sdpconfigobject' + id ] = blink
2231
23- window . _sdpscriptexportedresult = { }
32+ window [ ' _sdpscriptexportedresult' + id ] = { }
2433
25- window . _sdpcallbackfunc = ( ) => {
26- console . log ( '_sdpcallbackfunc' )
27- window . _sdpcallbackfunc = null
28- window . _sdpconfigobject = null
34+ window [ ' _sdpcallbackfunc' + id ] = ( ) => {
35+ console . log ( '_sdpcallbackfunc' + id )
36+ window [ ' _sdpcallbackfunc' + id ] = null
37+ window [ ' _sdpconfigobject' + id ] = null
2938
30- resolve ( )
39+ resolve ( that )
3140 }
3241
33- // remove previous code modules
34- const prev = [ ...document . querySelectorAll ( '.sdpmodulescriptcontainer' ) ]
35- prev . forEach ( d => document . body . removeChild ( d ) )
36-
3742 let code = `
3843const index = ${ config . index }
39- const exportedResult = window._sdpscriptexportedresult
44+ const exportedResult = window._sdpscriptexportedresult${ id }
4045
41- const params = window._sdpconfigobject._otherParams
46+ const params = window._sdpconfigobject${ id } ._otherParams
4247 `
4348 config . blocks . forEach ( b => {
44- code += `
45- const ${ b . ukey } = window._sdpconfigobject.${ b . ukey }
49+ if ( b . ukey ) {
50+ code += `
51+ const ${ b . ukey } = window._sdpconfigobject${ id } .${ b . ukey }
4652`
53+ }
4754 } )
4855
4956 code += `
5562${ mod . code }
5663
5764}catch(err){
58- console.log('error in module', err)
65+ console.log('error in module', err)
5966}
6067export default {}`
6168
6269 // add the code module
6370 let url = URL . createObjectURL ( new Blob ( [ code ] , { type : 'application/javascript' } ) )
64- appendScriptTag ( url , code )
71+ appendScriptTag ( url , code , id )
6572
6673 // add the last module for callback
6774 const lastModule = `
6875import _sdpPrivateInput from '${ url } '
69- window._sdpcallbackfunc()
76+ window._sdpcallbackfunc${ id } ()
7077`
7178
7279 url = URL . createObjectURL ( new Blob ( [ lastModule ] , { type : 'application/javascript' } ) )
73- appendScriptTag ( url , lastModule )
80+ appendScriptTag ( url , lastModule , id )
7481 } )
7582}
7683
0 commit comments