Estoy tratando de hacer algo en el "contexto de la página", para esto inyecto el script en la página como este
var pageScript = document.createElement('script'); pageScript.textContent = actualCode; document.body.insertBefore(pageScript, document.body.firstChild); el actualCoe es
var actualCode = '(' + function() { document.addEventListener(playerEventName, function(event) { console.log("page script fire""); }); } + ')();'; // end actualCodepero el oyente no se activa cuando envié el mensaje, en la consola solo veo el nombre del mensaje enviado.
El código completo de mi archivo script.js
document.addEventListener("DOMContentLoaded", function(event) { safari.extension.dispatchMessage("script injected successfully"); init(); }); let playerEventName = "su.nagornyi.yam.ext.evnt"; var init = function() { console.log("init started"); var pageScript = document.createElement('script'); pageScript.textContent = actualCode; document.body.insertBefore(pageScript, document.body.firstChild); }; // end init var actualCode = '(' + function() { document.addEventListener(playerEventName, function(event) { console.log("page script fire"); }); } + ')();'; // end actualCode safari.self.addEventListener("message", handleMessage); function handleMessage(event) { console.log(event.name); let playerEvent = new CustomEvent(playerEventName, { detail: { action: event.name } }); document.dispatchEvent(playerEvent); }; // end handleMessageUPD: Error en la consola:
Refused to execute a script because its hash its nonce or 'unsafe-inline'does not appear in the script-src directive of the Content Securrity policy.Entonces, ¿es posible inyectar script en esta página?
UPD2: en Safari App Extension, podemos inyectar scripts solo desde un archivo ubicado en el paquete de extensión.