2013-01-17 24 views
8

Otworzę okno dialogowe zawierające element iframe, a następnie ustawię fokus wewnątrz elementu iframe po otwarciu okna dialogowego.Fokus w elemencie iframe w przeglądarce Firefox

Obecnie staram się uzyskać ostrość na iframe, gdy zawartość jest załadowany:

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

To działa dobrze dla wszystkich przeglądarkach z wyjątkiem dla Firefoksa, a ja nie rozumiem dlaczego.

Czy ktoś może mi powiedzieć, dlaczego? Dzięki

+1

chciałbym wiedzieć to zbyt. Jest rok 2015 i Firefox nie zezwala na to, by element iframe skupiał się na sobie lub na czymkolwiek. To niezwykle proste skrzypce nie działa w Firefoksie: http://jsfiddle.net/4b32fgd8/ – user2867288

+0

Możliwy duplikat https://stackoverflow.com/questions/1508348/set-focus-to-iframe-body-content-in- firefox? rq = 1 –

+0

@ user2867288 Powodem, dla którego twoje skrzypce nie działa, jest prawdopodobnie to, że JSFiddle ustawia fokus w swoich edytorach kodu lub w inny sposób kradnie fokus, aby twoja ramka nie mogła. Nie mogę odtworzyć tego problemu na stronie JSFiddle, nawet ten kod działa: '' –

Odpowiedz

3

Firefox wydaje się nie mieć własności contentWindow, należy użyć contentDocument

Aktualizacja:

Po krótkiej debacie wymyśliłem lepszego rozwiązania:

<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> 

W w tym przykładzie zakładam, że w pliku y.html znajduje się pole wejściowe z identyfikatorem "xa". Działa zarówno w przeglądarce Chrome, jak i Firefox.

Old odpowiedź

Nawet lepiej należy użyć jQuery coś takiego:

<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> 

Oczywiście można zrobić jakieś dodatkowe sprawdzenie, czy iframe jest gotowy.

Więcej informacji można znaleźć tutaj http://www.w3schools.com/jsref/prop_frame_contentwindow.asp

+0

Domyślam się, że pytanie, które mam, jest bardziej zbliżone do tego, w jaki sposób ramka skupia się na firefoxie. na przykład Jak sprawić, aby ta jsfiddle działała w firefoxie? http://jsfiddle.net/4b32fgd8/ – user2867288

+0

To nie działa na jsfiddle, ponieważ coś innego kradnie fokus. Jeśli uruchomisz go na pełnym ekranie, będzie działał: http://jsfiddle.net/4b32fgd8/show/ – rfsbsb

+0

Dlaczego to nie działa bez trybu pełnoekranowego? http://jsfiddle.net/4b32fgd8/1/ – user2867288

1

Spróbuj zrobić to za pomocą 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

Skorzystaj z tego kodu na zdarzeniu ładowania elementu iframe –

Powiązane problemy