4 Stimmen

Fokus auf iframe in Chrome setzen

Ich habe einen iframe ( id: 'chat' ) mit designMode='on' in Chrom.

Bei einem Tastendruck rufe ich die Funktion send() die den Inhalt des iframe in einen Socket schreibt. Mein Problem ist, dass beim Löschen des iframe, ich den Fokus verlieren.

Wie setze ich den Fokus so, dass ich weiterhin Text in den iframe eingeben kann?

function send(){
    var $iframe = $('#chat');
    var text = $iframe.contents().text() + "\n";  

    socket.send(text);

    // When this is done, the focus is lost
    // If commented, the focus will not be lost
    $iframe.contents().find('body').empty();

    // My different failed attempts to regain the focus
    //$iframe.focus();
    //$iframe.contents().focus();
    //$iframe.contents().find('body').focus();
    //$iframe.contents().find('body').parent().focus();
    //$iframe[0].contentWindow.focus();

    // I've also tried all the above with timers
    //setTimeout( function(){ $('#chat').contents().focus(); }, 100);
}

Ich habe viele der in anderen Fragen genannten Lösungen ausprobiert, aber keine scheint zu funktionieren.

3voto

J. K. Punkte 8142

Der Trick besteht darin, zunächst den Fokus auf den Körper zu legen und dann eine Range .

var win = iframe.contentWindow;
var range = win.document.createRange();
range.setStart(win.document.body, 0);
range.setEnd(win.document.body, 0);
win.document.body.focus();
win.getSelection().addRange(range);

2voto

Arturo Sevilla Punkte 227

Diese Frage wurde hier beantwortet

Wenn Sie den iframe nicht aktualisieren, können Sie ihn im Grunde verwenden:

$iframe[0].contentWindow.focus();

Beachten Sie, dass ich das zugrundeliegende Iframe-DOM-Objekt abrufe.

1voto

Champ Punkte 680

Ich habe versucht, unten Lösung es funktioniert in allen Browsern (IE/Chrome/Firefox)

Der Kontext: Ich möchte den iframe immer fokussieren.

    function IFocus() {
        var iframe = $("#iframeId")[0];
        iframe.contentWindow.focus();
    };
    window.setInterval(IFocus, 300);

Ich hoffe, es hilft, wenn jemand in Not ist...

0voto

Stephen Ostermiller Punkte 20753

Ich habe diese Lösung mit Chrome getestet. Ich habe sie ursprünglich in Fokus auf iframe-Inhalt setzen .

Hier ist der Code, um einen iframe mit jQuery zu erstellen, ihn an das Dokument anzuhängen, ihn abzufragen, bis er geladen ist, und ihn dann zu fokussieren. Dies ist besser als die Einstellung einer beliebigen Zeitüberschreitung, die je nachdem, wie lange der iframe zum Laden braucht, funktionieren kann oder nicht.

var jqueryIframe = $('<iframe>', {
    src: "http://example.com"
}),
focusWhenReady = function(){
    var iframe = jqueryIframe[0],
    doc = iframe.contentDocument || iframe.contentWindow.document;
    if (doc.readyState == "complete") {
        iframe.contentWindow.focus();
    } else {
        setTimeout(focusWhenReady, 100)
    }
}
$(document).append(jqueryIframe);
setTimeout(focusWhenReady, 10);

Der Code für die Erkennung, wann der iframe geladen ist, wurde angepasst von Biranchi Die Antwort auf Wie kann man überprüfen, ob ein iframe geladen ist oder einen Inhalt hat?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X