4

Chrome にiframe ( id: 'chat') があります。designMode='on'

Enter keypress イベントでsend()、 iframe の内容を取得してソケットに書き込む function を呼び出します。私の問題は、iframe をクリアすると、フォーカスが失われることです。

iframe に引き続きテキストを入力できるようにフォーカスを設定するにはどうすればよいですか?

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);
}

他の質問に対して多くの解決策を試しましたが、どれもうまくいかないようです。

4

4 に答える 4

3

トリックは、最初にボディにフォーカスを設定してから、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);
于 2011-11-13T11:20:43.693 に答える
2

この質問はここで回答されました

基本的に、iframe を更新しない場合は、次を使用できます。

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

基になる iframe DOM オブジェクトを取得していることに注意してください。

于 2011-11-13T10:56:46.310 に答える
1

以下のソリューションを試してみましたが、すべてのブラウザー (IE/Chrome/Firefox) で動作します

コンテキスト: 常に iframe にフォーカスしたい。

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

困っている人がいれば、それが助けになることを願っています...

于 2016-08-22T12:01:43.807 に答える
0

このソリューションを Chrome でテストしました。私はもともとiframe コンテンツにフォーカスを設定するに投稿しました。

jQuery を使用して iframe を作成し、それをドキュメントに追加し、読み込まれるまでポーリングしてからフォーカスするコードを次に示します。これは、iframe の読み込みにかかる時間によって機能する場合と機能しない場合がある任意のタイムアウトを設定するよりも優れています。

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

iframe がいつロードされるかを検出するためのコードは、iframe がロードされているか、またはコンテンツがあるかを確認する方法に対するBiranchiの回答から適応されました。

于 2015-04-14T12:01:43.337 に答える