| /** | 
| * Should not be needed for same domain control (just call via child frame), | 
| *  but an API common for cross-domain and same domain use can be found | 
| *  in embedapi.js with a demo at embedapi.html | 
| */ | 
| export default { | 
|   name: 'xdomain-messaging', | 
|   init () { | 
|     const svgEditor = this; | 
|     const svgCanvas = svgEditor.canvas; | 
|     try { | 
|       window.addEventListener('message', function (e) { | 
|         // We accept and post strings for the sake of IE9 support | 
|         if (!e.data || !['string', 'object'].includes(typeof e.data) || e.data.charAt() === '|') { | 
|           return; | 
|         } | 
|         const data = typeof e.data === 'object' ? e.data : JSON.parse(e.data); | 
|         if (!data || typeof data !== 'object' || data.namespace !== 'svgCanvas') { | 
|           return; | 
|         } | 
|         // The default is not to allow any origins, including even the same domain or | 
|         //  if run on a `file:///` URL. See `svgedit-config-es.js` for an example of how | 
|         //  to configure | 
|         const {allowedOrigins} = svgEditor.curConfig; | 
|         if (!allowedOrigins.includes('*') && !allowedOrigins.includes(e.origin)) { | 
|           console.log(`Origin ${e.origin} not whitelisted for posting to ${window.origin}`); | 
|           return; | 
|         } | 
|         const cbid = data.id; | 
|         const {name, args} = data; | 
|         const message = { | 
|           namespace: 'svg-edit', | 
|           id: cbid | 
|         }; | 
|         try { | 
|           // Now that we know the origin is trusted, we perform otherwise | 
|           //   unsafe arbitrary canvas method execution | 
|           message.result = svgCanvas[name](...args); // lgtm [js/remote-property-injection] | 
|         } catch (err) { | 
|           message.error = err.message; | 
|         } | 
|         e.source.postMessage(JSON.stringify(message), '*'); | 
|       }); | 
|     } catch (err) { | 
|       console.log('Error with xdomain message listener: ' + err); | 
|     } | 
|   } | 
| }; |