2013-04-22 12 views
12

के लिए विकल्प मैं एक कारण से इंटरनेट पर खोज कर रहा हूं कि मेरा पूर्णस्क्रीन जावास्क्रिप्ट सफारी में क्यों काम नहीं करता है, लेकिन फिर भी वेबकिट ब्राउज़र क्रोम में काम करता है। ऐसा लगता है कि सफारी webkitRequestFullScreen के लिए element.ALLOW_KEYBOARD_INPUT ऐड-ऑन का समर्थन नहीं करता है।ALLOW_KEYBOARD_INPUT जावास्क्रिप्ट पूर्ण स्क्रीन

function cancelFullScreen(el) { 
    var requestMethod = el.cancelFullScreen || el.webkitCancelFullScreen || el.mozCancelFullScreen || el.exitFullscreen; 
    if (requestMethod) { // cancel full screen. 
     requestMethod.call(el); 
    } else if (typeof window.ActiveXObject !== "undefined") { // Older IE. 
     var wscript = new ActiveXObject("WScript.Shell"); 
     if (wscript !== null) { 
      wscript.SendKeys("{F11}"); 
     } 
    } 
} 

function requestFullScreen(el) { 
    // Supports most browsers and their versions. 
    var requestMethod = el.requestFullScreen || el.webkitRequestFullScreen(el.ALLOW_KEYBOARD_INPUT) || el.mozRequestFullScreen || el.msRequestFullScreen; 

    if (requestMethod) { // Native full screen. 
     requestMethod.call(el); 
    } else if (typeof window.ActiveXObject !== "undefined") { // Older IE. 
     var wscript = new ActiveXObject("WScript.Shell"); 
     if (wscript !== null) { 
      wscript.SendKeys("{F11}"); 
     } 
    } 
    return false 
} 

function toggleFull() { 
    var elem = document.body; // Make the body go full screen. 
    var isInFullScreen = (document.fullScreenElement && document.fullScreenElement !== null) || (document.mozFullScreen || document.webkitIsFullScreen); 

    if (isInFullScreen) { 
     cancelFullScreen(document); 
    } else { 
     requestFullScreen(elem); 
    } 
    return false; 
} 

क्या कोई सफारी को पूर्णस्क्रीन स्वीकार करने का तरीका जानता है फिर भी कीबोर्ड इनपुट को संभालने में सक्षम है?

+1

मैंने इस बग पर ठोकर खाई - मुझे विश्वास है - आज इस मुद्दे के बारे में। सफारी 8.0.6 (ओएस एक्स) पर, यदि कोई पहले से ही पूर्ण स्क्रीन मोड में है, तो रीफ्रेश करता है, कीबोर्ड काम करना शुरू कर देता है। यह अभी भी परेशान है क्योंकि किसी को टक्कर लगता है कि अमान्य कुंजी प्रेस को इंगित करना चाहिए। लेकिन keypresses वास्तव में के माध्यम से जाना। – akauppi

उत्तर

19

ऐप्पल के documentation के अनुसार, यह सफारी 5.1 और बाद में काम करना चाहिए, लेकिन जाहिर है यह नहीं है। मैं एप्पल (जो वे सार्वजनिक नहीं कर सकता हूँ) के साथ एक बग रिपोर्ट दायर की है, और उत्तर इस प्रकार थी:

इंजीनियरिंग निर्धारित किया है कि इस मुद्दे के रूप में निम्नलिखित के आधार पर इरादा बर्ताव करता है: हम जानबूझकर अक्षम कीबोर्ड का उपयोग सुरक्षा कारणों से पूर्ण स्क्रीन में।

मैंने जवाब दिया है कि वे कम से कम दस्तावेज़ीकरण को अद्यतन करते हैं और फीचर समर्थन की कमी को किसी भी तरह से पहचानने योग्य बनाते हैं। अगर मुझे कोई जवाब मिल जाए तो मैं यहां अपडेट करूंगा।

दुर्भाग्यवश, सुविधा पहचान करने का कोई अच्छा तरीका नहीं है, क्योंकि element.ALLOW_KEYBOARD_INPUT सफारी में परिभाषित किया गया है, और उस ध्वज के साथ फ़ंक्शन कॉल में कोई त्रुटि नहीं आती है। एकमात्र शेष विकल्प उपयोगकर्ता एजेंट स्ट्रिंग को पार्स करना है (this library आज़माएं)।

जाहिर है, ऐप्पल अभी तक दस्तावेज नहीं करता है कि कौन सा संस्करण इसका समर्थन करता है, लेकिन this के अनुसार, यह v5.1.2 के रूप में काम करना बंद कर दिया। यह 5.1 अन-पैच का उपयोग कर बहुत कम संख्या में लोगों को छोड़ देगा, अगर यह कभी भी काम करता है। तो शायद यह संस्करण का पता लगाने लायक भी नहीं है।

फॉलबैक के रूप में, मैं सीएसएस ऊंचाई और चौड़ाई को 100% और "निश्चित" या "पूर्ण" स्थिति में सेट करके ब्राउज़र विंडो को भरने के लिए वांछित DOM तत्व का विस्तार करूंगा।

अद्यतन: ऐसा लगता है कि प्रलेखन को सही किया गया है और अब ALLOW_KEYBOARD_INPUT ध्वज का उल्लेख नहीं करता है।

+0

आपके द्वारा किए गए कार्यों के लिए बहुत बहुत धन्यवाद .. मेरे लिए पूर्ण स्क्रीन बनाने की मुख्य इच्छा एप्लिकेशन बार और ब्राउज़र मार्जिन को छिपाना है ताकि मेरा वेब ऐप मूल एप्लिकेशन के रूप में दिखाया जा सके .. धन्यवाद फिर से .. मैं नहीं देख सकता कौन सा सुरक्षा समस्या 'element.ALLOW_KEYBOARD_INPUT' – Dimser

+6

को परेशान कर सकती है मेरा मानना ​​है कि सुरक्षा जोखिम यह है कि एक साइट एक पूर्ण-स्क्रीन ऐप बना सकती है जो नकली यूआरएल बार के साथ-साथ आपके ब्राउजर की तरह दिखती है और गलत तरीके से पासवर्ड दर्ज करने में लोगों को धोखा देती है साइट। – brianchirls

+0

अब तक कहानी के एक महान सारांश के लिए धन्यवाद। इसका मतलब है क्रोम et.al. वेब ऐप्स के लिए अनुशंसा की जाएगी जहां पूर्ण स्क्रीन मोड बिल्कुल समझ में आता है। एक बार पूर्णस्क्रीन एपीआई स्थिर होने के बाद उम्मीद है कि सफारी भीड़ में शामिल हो जाएगा। – akauppi

1

यह Safari 10.1 में तय किया गया है!

"सफारी ब्राउज़र व्यवहार" अनुभाग के तहत।

संबंधित मुद्दे