RISOLTO Eseguire funzione js su pagina che ospita l'iframe

hddsfortuna

Utente Attivo
869
39
Net
FTTH 1000/300
OS
Ubuntu 22.04
Ciao a tutti,

io ho una pagina a.htm che ha all'interno un iframe che chiama alla pagina b.htm.

Nella pagina a.htm ho definito una funzione in js chiamata aprielenco(), ma voglio chiamarla da b.htm, che è la pagina contenuta nell'iframe di a.htm.


Come faccio?

Grazie
 
M

Mursey

Ospite
Gli iFrame sono ambienti chiusi e per sicurezza non possono interagire.

Un modo per fare quello che chiedi e' mandando messaggi tramite la sendMessage, il codice su b manda un messaggio ad a che esegue il codice js che contiene.
 

hddsfortuna

Utente Attivo
869
39
Net
FTTH 1000/300
OS
Ubuntu 22.04
Gli iFrame sono ambienti chiusi e per sicurezza non possono interagire.
Però io dalla pagina b.htm se eseguo window.top.location = 'destinazione' mi porta alla pagina che specifico.
Un modo per fare quello che chiedi e' mandando messaggi tramite la sendMessage, il codice su b manda un messaggio ad a che esegue il codice js che contiene.
E mi potresti far vedere come si fa?



Grazie
 
M

Mursey

Ospite
Ti sto preparando un esempio pero' specifico una cosa, la funzione aprielenco() puo' essere invocata da b ma agira' sempre su a.
Vuoi che agisca su b ? Se e' così la cosa e' piu' complessa e ci devo riflettere un po'...

- - - Updated - - -

a.html
Codice:
<html>
   <head>
      <title>a</title>
   <script>
       function aprielenco() {
          alert('aprielenco() eseguita');
       }
       function respondToMessage(e) {
          if (e.data === 'execute') {
             aprielenco();
          }
       }
       window.addEventListener('message', respondToMessage, false); 
   </script>
   </head>
   <body style="background-color:blue">
      <iframe src="b.html"></iframe>
   </body>
</html>

b.html
Codice:
<html>
   <head>
      <title>b</title>
   <script>
       function esegui() {
          parent.postMessage('execute', '*');
       }
   </script>
   </head>
   <body style="background-color:green">
   <input type="button" value='aprielenco()' onclick='esegui()' />
   </body>
</html>

testato e funzionante su IE11
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!