質問

私のページ document.onkeydown イベントハンドラがないと思うの負荷では、iframeの他のページです。していますをクリック内部のiframeコンテンツを取得するページの開始に"聴解"があります。

がんにJavaScriptを使用し、外のページの設定の焦点の内ページとは思えないクリック内部のiframe?

編集:応答コメント:

コンテキストではメインウインドウを閉じ、ライトボックス-システムを除き、代わりの写真でiframes、iframe ーン"はインタラクティブなページkeydown/mousemoveハンドラ.これらのハンドラな火災までをクリックし、iframeを表示後、箱ものです。

私は実際に見る"setFocus"の使命は非常に重要だと考えていなどを有効にする"イベントハンドラのiframe contentDocument"

役に立ちましたか?

解決

私はjQueryのThickBoxの(ライトボックススタイルのダイアログ・ウィジェット)と同様の問題がありました。次のように私は私の問題を修正方法があります:

function setFocusThickboxIframe() {
    var iframe = $("#TB_iframeContent")[0];
    iframe.contentWindow.focus();
}

$(document).ready(function(){
   $("#id_cmd_open").click(function(){
      /*
         run thickbox code here to open lightbox,
         like tb_show("google this!", "http://www.google.com");
       */
      setTimeout(setFocusThickboxIframe, 100);
      return false;
   });
});

コード)(setTimeoutをせずに動作するようには思えません。私のテストによると、それはFirefox3.5、Safari4、Chrome4など、IE7とIE6で動作します。

他のヒント

contentWindow.focus()メソッドを使用して、タイムアウトが完全にロードされるIFRAMEを待つおそらく必要である。

私にとっては、またFirefoxで、属性onload="this.contentWindow.focus()"の作品を使用して、iframeタグに

document.getElementsByName("iframe_name")[0].contentWindow.document.body.focus();

親ドキュメント内のイベントをリッスンとiframe文書のハンドラにイベントを渡してみます。

私は別のページからロードされたiframe内のtxtエリアに注力しようとしていた同様の問題がありました。ほとんどの場合、それが動作します。そこのiFrameがロードされたとき、それはFFで発火する問題があったが前にそれが見えました。その焦点が正しく設定されているように見えたことはありません。

私は

上記cheemingの答えをまねた溶液を用いて、この周りに働きました
    var iframeID = document.getElementById("modalIFrame"); 
//focus the IFRAME element 
$(iframeID).focus(); 
//use JQuery to find the control in the IFRAME and set focus 
$(iframeID).contents().find("#emailTxt").focus(); 

私はFFがiframe.contentWindowのためではなくiframe.contentWindow.documentためのフォーカスイベントをトリガすることを発見しました。 例えばChromeは両方のケースを扱うことができます。そう、私は働いて物事を得るためにiframe.contentWindowに私のイベントハンドラをバインドするために必要。 多分これは誰かに役立ちます...

こちらはコードをiframe jQueryを使った、追加で書世論調査までが読み込まれ、その後にフォーカスするかどうか.このように設定を任意のタイムアウトの場合は動作しないことがあり方によっては、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の負荷に対し Biranchiの回答を 確認方法がiframeが読み込まれます。

それは少し間違っ匂いが

これは、私のために働いていたものです。

var iframe = ...
var doc = iframe.contentDocument;

var i = doc.createElement('input');
i.style.display = 'none'; 
doc.body.appendChild(i);
i.focus();
doc.body.removeChild(i);

うーん。それはまた、コンテンツの一番下にスクロールします。私が先頭にダミーテキストボックスを挿入する必要がありますね。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top