2015-10-03 10 views
6

Ho scritto un codice html che inizializza il mio iframe con un altro sito.Come rilevare l'URL iframe corrente?

mio dominio è per esempio:

www.mydomain.com/Index.html

in questo c'è un

<iframe src = "www.anotherdomain.com/pages/firstPage.html"/> 

voglio rilevare il nuovo URL completo src ogni volta che l'iframe ne ottiene uno nuovo Il testo iframe consiste in collegamenti ad altre pagine all'interno della pagina inizializzata. È possibile e legale ottenerlo? Grazie. Qualsiasi aiuto è apprezzato.

Suppongo che vada oltre i problemi di origine ma ci sia un lavoro da fare per questo?

Aggiornamento

Ho cercato di ottenere la risposta da

document.getElementById("myIframeId").src 

all'evento carico telaio. Ma continua a mostrare il src con il quale è inizializzato. Non mostra la versione aggiornata di src.

document.getElementById("myIframeId").contentWindow.location.href 

fornisce l'errore di sicurezza che una frame http sta tentando di accedere a https nell'iframe. Protocolli non corrispondenti.

Ho creato l'host locale su SSL e ho utilizzato https ma la richiesta è stata bloccata. Non so perché.

risposta

1

non sono d'accordo con le risposte che suggeriscono che si dovrebbe usare "src" per rilevare l'URL attuale del iframe. Semplicemente non ti dà l'url corrente, ma l'url con cui è iniziato.

Il dominio deve essere dalla stessa origine di utilizzare il metodo del seguente codice:

$(document).ready(function() { 
    $('#myframe').load(function() { 
    alert($(this).get(0).contentWindow.location.href); 
    }); 
}); 

Se i domini sono da origini diverse - ma si ha accesso ad entrambi (o entrambi sono il vostro), quindi è possibile utilizzare la funzione window.postMessage e la proprietà contentWindow di iFrame per inviare i dati per il genitore da mostrare quando viene caricata una nuova pagina.

Ecco un tutorial su questo: http://javascript.info/tutorial/cross-window-messaging-with-postmessage

E se il dominio nel iFrame è completamente estraneo, un approccio mi viene in mente è quello di caricare quel dominio in uno script lato server e farlo rendere questi dati con collegamenti alterati. Ora puoi chiamare questo script all'interno dell'iFrame e usare la proprietà contentWindow.location.href ogni volta che carica.

+0

Sì, hai indicato il problema che sto affrontando. Puoi controllare la domanda aggiornata. Grazie –

+0

Ho già dato le risposte alle questioni che hai evidenziato nel tuo aggiornamento –

0

No, non genera un errore di origine incrociato.

<iframe id="test" src="www.anotherdomain.com/pages/firstPage.html"></iframe> 

Javascript:

alert(document.getElementById('test').src); 

Si avvisa il valore src di iframe.

Inoltre, è possibile impostare src in modo dinamico.

document.getElementById('test').src = "http://www.neuralnetworksolutions.com/resources.php"; 

Potete saperne di più su javascript iframe da http://www.dyn-web.com/tutorials/iframes/

+0

Controllare la domanda aggiornata. Grazie –

2

È possibile controllare la proprietà src su un intervallo per vedere se è cambiato. Ecco una funzione che lo farà per te.

function watchIframeSRC(iframe, callback, interval) { 
    // check every 1 second by default 
    if (typeof interval === 'undefined') { 
     interval = 1000; 
    } 
    var src = iframe.src; 
    return setInterval(function() { 
     // invoke the callback if the src is different 
     if (iframe.src !== src) { 
      src = iframe.src; 
      callback(iframe); 
     } 
    }, interval); 
} 

var iframe = document.getElementById('test'); 

watchIframeSRC(iframe, function (iframe) { 
    console.log("iframe src:", iframe.src); 
}); 
+0

Non lo voglio così. Ma comunque non funziona con l'attributo src. Controlla la domanda aggiornata. Grazie –

+0

Quello che stai chiedendo non è possibile. E dai suoni, stai tentando di fare qualcosa di malizioso. –

0

Ok. Ho lavorato in giro per capire le varie risposte, ma sono stato in grado di farlo con l'aiuto di YQL e jQuery per effettuare richieste su ajax su più domini. L'iFrame non mi permetterà di accedere ai suoi eventi interni. Ho raschiato html da un altro dominio con YQL e ho fatto funzionare la cosa. Rimosso il mio iFrame e metto l'html raschiato in un div.

Problemi correlati