2013-01-17 13 views
8

Aprirò una finestra di dialogo che contiene un iframe, quindi imposterò l'iframe una volta aperta la finestra di dialogo.Focus in un iframe in Firefox

Attualmente, cercare di ottenere l'attenzione per l'iframe quando il contenuto viene caricato:

<iframe src="../credits.html" onload="this.contentWindow.focus()"></iframe> 

Funziona bene per tutti i browser tranne che per Firefox, e non capisco perché.

Qualcuno può dirmi perché? Grazie

+1

Vorrei sapere anche questo. È il 2015 e Firefox non sembra consentire a un iframe di concentrarsi su se stesso o su qualcosa al suo interno. Questo violino estremamente semplice non funziona in Firefox: http://jsfiddle.net/4b32fgd8/ – user2867288

+0

Possibile duplicato di https://stackoverflow.com/questions/1508348/set-focus-to-iframe-body-content-in- firefox? rq = 1 –

+0

@ user2867288 Il motivo per cui il tuo violino non funziona è probabilmente dovuto al fatto che JSFiddle sta impostando lo stato attivo nei loro editor di codice, o altrimenti rubando lo stato attivo in modo che il tuo frame non possa. Non riesco a riprodurre questo problema su JSFiddle, anche questo codice funziona: '' –

risposta

3

Firefox sembra non avere proprietà contentWindow, si dovrebbe usare contentDocument

Aggiornamento:

Dopo un piccolo dibattito mi si avvicinò con una soluzione migliore:

<html> 
<head> 
    <title></title> 
    <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></script> 
    <script type="text/javascript"> 
$(function() { 
    $("#xframe").bind("load", function(){ 
     $(this).contents().find("#xa").focus(); 
    }); 
}); 

    </script> 
</head> 
<body> 
<iframe id="xframe" src="./y.html"></iframe> 
</body> 
</html> 

In questo esempio, presumo che ci sia un campo di input in y.html che ha un id "xa". Ha funzionato sia su Chrome che su Firefox.

Vecchio risposta

Ancora meglio si dovrebbe utilizzare jQuery, qualcosa come:

<html> 
<head> 
    <title></title> 
    <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></script> 
    <script type="text/javascript"> 
    $(document).ready(function() { 
    $("#xframe").focus(); 
    }); 
    </script> 
</head> 
<body> 
<iframe id="xframe" src="./y.html"></iframe> 
</body> 
</html> 

Naturalmente si potrebbe fare un po 'di controllo in più per vedere se l'iframe è pronto.

Maggiori informazioni possono essere trovate qui http://www.w3schools.com/jsref/prop_frame_contentwindow.asp

+0

Immagino che la domanda che ho sia più simile a come un frame si concentra su firefox. per esempio. come fai a far funzionare questo jsfiddle in firefox? http://jsfiddle.net/4b32fgd8/ – user2867288

+0

Non funziona su jsfiddle perché qualcos'altro sta rubando l'attenzione. Se lo si esegue a schermo intero, funzionerà: http://jsfiddle.net/4b32fgd8/show/ – rfsbsb

+0

Allora perché non funziona senza schermo intero? http://jsfiddle.net/4b32fgd8/1/ – user2867288

1

Prova farlo usando jQuery

// focus an input in iframe 
$('#xframe').contents().find('input').get(0).focus() 


// or simply iframe window 
var iframe= $('#xframe')[0]; 
var iframewindow= iframe.contentWindow?  iframe.contentWindow :  iframe.contentDocument.defaultView; 
iframewindow.focus() 
+0

Utilizzare questo codice su evento di caricamento iframe –