سؤال

لدي صفحة مع document.onkeydown معالج الحدث وأنا التحميل داخل iframe في صفحة أخرى.يجب أن انقر داخل iframe للحصول على المحتوى صفحة البداية "الاستماع".

هل هناك طريقة يمكنني استخدام جافا سكريبت في الخارجية الصفحة لتعيين التركيز إلى الصفحة الداخلية لذلك أنا لم يكن لديك إلى انقر داخل iframe?

تحرير:ردا على التعليق:

السياق هو الإطار الرئيسي هو ضوء مربع-مثل النظام ، باستثناء بدلا من الصور يظهر نوافذ الأطر المدمجة ، و كل iframe تفاعلية الصفحة مع keydown/mousemove معالجات.هذه معالجات لا النار حتى أنا فوق في iframe بعد عرض ضوء مربع شيء.

أنا لا أبحث في الواقع إلى "setFocus" بالمعنى التقليدي بقدر "تمكين معالجات الأحداث على iframe contentDocument"

هل كانت مفيدة؟

المحلول

وكان لي مشكلة مماثلة مع مسج 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 ليتم تحميلها بالكامل.

وبالنسبة لي، أيضا باستخدام أعمال السمة onload="this.contentWindow.focus()"، مع فايرفوكس، في علامة iframe

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

وحاول الاستماع للأحداث في الوثيقة الأصلية ويمر هذا الحدث إلى معالج في الوثيقة IFRAME.

وكان لي مشكلة مماثلة حيث كنت أحاول التركيز على منطقة النص في 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. الكروم على سبيل المثال يمكن التعامل مع كلتا الحالتين. لذلك، أنا فقط بحاجة إلى ربط معالجات الأحداث جهدي لiframe.contentWindow من أجل الحصول على عمل الأشياء. ربما هذا يساعد شخص ما ...

هنا هو رمز لخلق 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 تحميل تم تكييفها من Biranchi's جواب كيفية التحقق إذا 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