javascript Iframe सामग्री पर ध्यान केंद्रित करना



dom setfocus (7)

यह ऐसा कुछ है जो मेरे लिए काम करता है, हालांकि यह थोड़ा गलत गंध करता है:

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

हममम। यह सामग्री के नीचे स्क्रॉल भी करता है। मान लीजिए मुझे शीर्ष पर डमी टेक्स्टबॉक्स डालना चाहिए।

मेरे पास एक document.onkeydown वाला एक पृष्ठ है। ऑफकीडाउन इवेंट हैंडलर, और मैं इसे किसी अन्य पृष्ठ में आईफ्रेम के अंदर लोड कर रहा हूं। सामग्री पृष्ठ को "सुनने" शुरू करने के लिए मुझे iframe के अंदर क्लिक करना होगा।

क्या कोई तरीका है कि मैं बाहरी पृष्ठ पर फोकस सेट करने के लिए बाहरी पृष्ठ में जावास्क्रिप्ट का उपयोग कर सकता हूं, इसलिए मुझे iframe के अंदर क्लिक करने की आवश्यकता नहीं है?

संपादित करें: टिप्पणी का जवाब:

संदर्भ मुख्य विंडो एक प्रकाश-बॉक्स जैसी प्रणाली है, चित्रों के बजाय, यह iframes दिखाती है, और प्रत्येक iframe keydown / mousemove हैंडलर के साथ एक इंटरैक्टिव पृष्ठ है। जब तक मैं लाइट-बॉक्स-चीज़ दिखाने के बाद आईफ्रेम में क्लिक नहीं करता तब तक ये हैंडलर आग नहीं लगाते हैं।

मैं वास्तव में पारंपरिक अर्थ में "सेटफोकस" की तलाश नहीं कर रहा हूं जितना "आईफ्रेम सामग्री दस्तावेज़ पर ईवेंट हैंडलर सक्षम करें"


Answer #1

मुझे एक ही समस्या थी जहां मैं किसी अन्य पृष्ठ से लोड किए गए आइफ्रेम में एक txt क्षेत्र पर ध्यान केंद्रित करने का प्रयास कर रहा था। ज्यादातर मामलों में यह काम करता है। एक मुद्दा था जहां आईएफआरएएम लोड होने पर एफएफ में आग लग जाएगी, लेकिन इससे पहले कि यह दिखाई दे। तो फोकस सही ढंग से सेट नहीं लग रहा था।

मैंने उपरोक्त के जवाब देने के लिए एक सिमुलेटर समाधान के साथ इस के आसपास काम किया

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

Answer #2

मैंने पाया कि एफएफ iframe.contentWindow के लिए फोकस इवेंट ट्रिगर करता है लेकिन iframe.contentWindow.document के लिए नहीं। उदाहरण के लिए क्रोम दोनों मामलों को संभाल सकता है। इसलिए, मुझे काम करने के लिए इवेंट हैंडलर को iframe.contentWindow में बाध्य करने की आवश्यकता थी। शायद यह किसी की मदद करता है ...


Answer #3

मुझे jQuery थिकबॉक्स (एक लाइटबॉक्स-शैली संवाद विजेट) के साथ एक ही समस्या थी। जिस तरह से मैंने अपनी समस्या तय की है वह निम्नानुसार है:

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

कोड सेटटाइमआउट () के बिना काम नहीं कर रहा है। मेरे परीक्षण के आधार पर, यह फ़ायरफ़ॉक्स 3.5, सफारी 4, क्रोम 4, आईई 7 और आईई 6 में काम करता है।


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

Answer #5

ContentWindow.focus () विधि का उपयोग करके, iframe पूरी तरह से लोड होने के लिए प्रतीक्षा करने के लिए टाइमआउट संभवतः आवश्यक है।

मेरे लिए, एट्रिब्यूट onload="this.contentWindow.focus()" फ़ायरफ़ॉक्स के साथ, iframe टैग में भी काम करता है


Answer #6

मूल दस्तावेज़ में घटनाओं को सुनकर और इफ्रेम दस्तावेज़ में ईवेंट को हैंडलर में पास करने का प्रयास करें।





setfocus