iPad वेब ऐप: सफारी में जावास्क्रिप्ट का उपयोग करके वर्चुअल कीबोर्ड का पता लगाएं?


147

मैं iPad के लिए एक वेब ऐप लिख रहा हूं ( नियमित ऐप स्टोर ऐप नहीं - यह HTML, सीएसएस और जावास्क्रिप्ट का उपयोग करके लिखा गया है)। चूंकि कीबोर्ड स्क्रीन के एक बड़े हिस्से को भरता है, इसलिए कीबोर्ड को दिखाए जाने पर शेष स्थान को फिट करने के लिए ऐप के लेआउट को बदलना समझ में आता है। हालाँकि, मुझे पता लगाने का कोई तरीका नहीं मिला है कि कीबोर्ड कब और कहाँ दिखाया गया है।

मेरा पहला विचार यह मान लेना था कि जब टेक्स्ट फ़ील्ड फ़ोकस होता है तो कीबोर्ड दिखाई देता है। हालाँकि, जब कोई बाहरी कीबोर्ड iPad से जुड़ा होता है, तो वर्चुअल कीबोर्ड तब दिखाई नहीं देता जब कोई टेक्स्ट फील्ड फोकस करता है।

मेरे प्रयोगों में, कीबोर्ड ने DOM तत्वों में से किसी की ऊंचाई या स्क्रॉलहाइट को भी प्रभावित नहीं किया है, और मुझे कोई मालिकाना घटना या गुण नहीं मिला है जो यह दर्शाता हो कि कीबोर्ड दिखाई दे रहा है या नहीं।


1
हम्म, दिलचस्प समस्या। IPad के Safari पर "विंडो" की ऑब्जेक्ट्स पर पुनरावृत्ति करने का प्रयास करें यह देखने के लिए कि क्या कीबोर्ड समर्थन से संबंधित कोई विशेष ऑब्जेक्ट हैं।
डेविड मर्डोक

@ डेविड जो काम नहीं करेगा, कीबोर्ड एक जावास्क्रिप्ट "विंडो" नहीं है।
kennytm

2
@KennyTM। ओह। लेकिन विंडो के किसी भी ऑब्जेक्ट में ऑन-स्क्रीन कीबोर्ड डिस्प्ले से संबंधित एक झंडा हो सकता है। यह एक शॉट के लायक है।
डेविड मर्डोक

1
मैंने वो कोशिश की। दुर्भाग्य से कुछ भी नहीं मिला। साथ ही कीबोर्ड दिखाने से पहले और बाद में सभी विंडो गुणों की तीन स्तरों की तुलना की गई। कोई भी अंतर कीबोर्ड के लिए संकेतक के रूप में प्रासंगिक नहीं लग रहा था।
LKM

3
क्या इसका कोई नया जवाब है ??
फ्रैक्चर सिप

जवाबों:


54

मुझे एक समाधान मिला जो काम करता है, हालांकि यह थोड़ा बदसूरत है। यह भी हर स्थिति में काम नहीं करेगा, लेकिन यह मेरे लिए काम करता है। चूंकि मैं iPad के विंडो के आकार के उपयोगकर्ता इंटरफ़ेस के आकार को बदल रहा हूं, इसलिए उपयोगकर्ता आमतौर पर स्क्रॉल करने में असमर्थ है। दूसरे शब्दों में, अगर मैं विंडो के स्क्रॉलटॉप को सेट करता हूं, तो यह 0 पर रहेगा।

यदि, दूसरी ओर, कीबोर्ड दिखाया गया है, तो स्क्रॉल करना अचानक काम करता है। इसलिए मैं स्क्रॉलटॉप सेट कर सकता हूं, तुरंत इसके मूल्य का परीक्षण कर सकता हूं, और फिर इसे रीसेट कर सकता हूं। यहां बताया गया है कि jQuery का उपयोग करके कोड में कैसे दिख सकता है:

$(document).ready(function(){
    $('input').bind('focus',function() {
        $(window).scrollTop(10);
        var keyboard_shown = $(window).scrollTop() > 0;
        $(window).scrollTop(0);

        $('#test').append(keyboard_shown?'keyboard ':'nokeyboard ');
    });
});

आम तौर पर, आप यह अपेक्षा करेंगे कि उपयोगकर्ता को दिखाई न दे। दुर्भाग्य से, कम से कम जब सिम्युलेटर में चल रहा है, तो iPad नेत्रहीन (हालांकि जल्दी से) फिर से ऊपर और नीचे स्क्रॉल करता है। फिर भी, यह काम करता है, कम से कम कुछ विशिष्ट स्थितियों में।

मैंने इसे एक iPad पर परीक्षण किया है, और यह ठीक काम करता है।


मैं अपने वेब ऐप के साथ कोई समस्या रखता हूं, जब इनपुट पर ध्यान केंद्रित किया जाता है, तो स्क्रीन थोड़ा ऊपर स्क्रॉल करती है। मैंने अन्यथा स्क्रॉल करना अक्षम कर दिया है, लेकिन फिर भी यह स्क्रॉल करता है। कोई विचार? धन्यवाद [ stackoverflow.com/questions/6740253/…
एंड्रयू सैम्यूल्सन

मैंने अभी तक यह कोशिश नहीं की है, लेकिन यह आशाजनक लगता है। .scrollTop(1)सिर्फ काम नहीं करेगा और कम स्पष्ट होगा?
थिंकिंगस्टिफ

1
यह बुरा विचार है ... कीबोर्ड ब्लूटूथ हो सकता है और वर्चुअल प्रदर्शित नहीं हो सकता है।
theSociableme

3
@theSociableme: इस समाधान का पूरा बिंदु ब्लूटूथ कीबोर्ड को ठीक से संभालना है। यदि आपने ब्लूटूथ कीबोर्ड को नजरअंदाज कर दिया है, तो यह पता लगाना कि वर्चुअल कीबोर्ड आसान था या नहीं, क्योंकि आप यह जांच सकते हैं कि क्या कोई फील्ड फोकस था।
LKM

5
@fraxture: एक व्यापक स्पष्टीकरण का पता नहीं है (यदि आप शोध करते हैं और एक लिखते हैं, तो मैं इसे पढ़ना पसंद करूंगा)। दो प्लेटफ़ॉर्म अपने मुख्य ब्राउज़र में ऑनस्क्रीन कीबोर्ड को बहुत अलग तरीके से संभालते हैं। एंड्रॉइड क्रोम कीबोर्ड के लिए जगह बनाने के लिए व्यूपोर्ट की ऊंचाई को सिकोड़ता है, इसलिए कीबोर्ड दिखाए जाने पर पृष्ठ आकार बदल जाता है। iOS सफारी कीबोर्ड के साथ पेज को ओवरले करता है (पेज का साइज एक जैसा रहता है), और यह बताता है कि स्क्रॉलिंग कैसे काम करती है। सफारी दोनों को व्यूपोर्ट के अंदर पृष्ठ स्क्रॉल करता है, और समवर्ती रूप से व्यूपोर्ट को स्थानांतरित करता है, यह सुनिश्चित करता है कि पृष्ठ के नीचे कीबोर्ड के ऊपर है जब सभी तरह से नीचे स्क्रॉल किया गया हो।
एलकेएम

32

कीबोर्ड बर्खास्तगी का पता लगाने के लिए आप फ़ोकटआउट घटना का उपयोग कर सकते हैं । यह धब्बा की तरह है, लेकिन बुलबुले। जब कीबोर्ड बंद हो जाएगा (लेकिन अन्य मामलों में भी, निश्चित रूप से) यह आग लग जाएगी। सफ़ारी और क्रोम में घटना को केवल addEventListener के साथ पंजीकृत किया जा सकता है, न कि विरासत के तरीकों के साथ। यहां एक उदाहरण है जो मैंने कीबोर्ड बर्खास्तगी के बाद फोनगैप ऐप को पुनर्स्थापित करने के लिए उपयोग किया था।

 document.addEventListener('focusout', function(e) {window.scrollTo(0, 0)});

इस स्निपेट के बिना, ऐप कंटेनर पृष्ठ ताज़ा होने तक अप-स्क्रॉल किए गए स्थान पर रहा।


1
मेरी समस्या का सबसे अच्छा समाधान मुझे मिला
सुतुलस्तस


1
इसके अलावा, आप कीबोर्ड ओपन का पता लगाने के लिए 'फ़ोकसिन' संस्करण का उपयोग कर सकते हैं।
ए। सेटिन

15

शायद थोड़ा बेहतर समाधान विभिन्न इनपुट क्षेत्रों पर "धब्बा" घटना के साथ बांधने के लिए है (मेरे मामले में jQuery के साथ)।

ऐसा इसलिए है क्योंकि जब कीबोर्ड गायब हो जाता है तो सभी फॉर्म फ़ील्ड धुंधले हो जाते हैं। तो मेरी स्थिति के लिए इस समस्या को हल किया।

$('input, textarea').bind('blur', function(e) {

       // Keyboard disappeared
       window.scrollTo(0, 1);

});

आशा करता हूँ की ये काम करेगा। मिशेल


इस उत्तर के लिए धन्यवाद। मुझे एक समस्या को हल करने के लिए उपयोगी लगा जहां iPad सफारी कीबोर्ड ने टेक्स्टारिया कर्सर को टेक्सारिया के बाहर विस्थापित (ऑफसेट) किया।
kennbrodhagen

14

यदि ऑन-स्क्रीन कीबोर्ड है, तो एक टेक्स्ट फ़ील्ड जो व्यूपोर्ट के निचले हिस्से के पास है ध्यान केंद्रित करने से सफारी को टेक्स्ट फ़ील्ड को देखने के लिए स्क्रॉल करने का कारण होगा। कीबोर्ड की उपस्थिति का पता लगाने के लिए इस घटना का फायदा उठाने का कोई तरीका हो सकता है (पृष्ठ के निचले भाग में एक छोटा पाठ क्षेत्र होना, जो समय-समय पर फोकस करता है, या ऐसा कुछ)।


1
यह एक सरल विचार है। मुझे एक समान समाधान मिला जो वर्चुअल कीबोर्ड का पता लगाने के लिए वर्तमान स्क्रॉल स्थिति का उपयोग करता है।
LKM

शानदार! आपने मेरा दिन बचाया
एकटैक

11

फ़ोकस इवेंट के दौरान आप दस्तावेज़ की ऊँचाई को स्क्रॉल कर सकते हैं और जादुई रूप से window.innerHeight को वर्चुअल कीबोर्ड की ऊँचाई से कम कर सकते हैं। ध्यान दें कि वर्चुअल कीबोर्ड का आकार लैंडस्केप बनाम पोर्ट्रेट ओरिएंटेशन के लिए अलग-अलग होता है, इसलिए जब आप इसे बदलते हैं तो आपको इसे रिडीकेट करना होगा। मैं इन मूल्यों को याद रखने के खिलाफ सलाह दूंगा क्योंकि उपयोगकर्ता किसी भी समय एक ब्लूटूथ कीबोर्ड को कनेक्ट / डिस्कनेक्ट कर सकता है।

var element = document.getElementById("element"); // the input field
var focused = false;

var virtualKeyboardHeight = function () {
    var sx = document.body.scrollLeft, sy = document.body.scrollTop;
    var naturalHeight = window.innerHeight;
    window.scrollTo(sx, document.body.scrollHeight);
    var keyboardHeight = naturalHeight - window.innerHeight;
    window.scrollTo(sx, sy);
    return keyboardHeight;
};

element.onfocus = function () {
    focused = true;
    setTimeout(function() { 
        element.value = "keyboardHeight = " + virtualKeyboardHeight() 
    }, 1); // to allow for orientation scrolling
};

window.onresize = function () {
    if (focused) {
        element.value = "keyboardHeight = " + virtualKeyboardHeight();
    }
};

element.onblur = function () {
    focused = false;
};

ध्यान दें कि जब उपयोगकर्ता एक ब्लूटूथ कीबोर्ड का उपयोग कर रहा है, तो कीबोर्डहाइट 44 है जो कि "पिछले] [अगला] टूलबार की ऊंचाई है।

जब आप यह पता लगाते हैं तो एक छोटा सा झिलमिलाहट होता है, लेकिन इससे बचना संभव नहीं लगता।


5
मैंने अभी-अभी iOS 8.2 में यह कोशिश की है और यह काम नहीं करता है ... क्या यह नए iOS के लिए कुछ स्टेज पर काम करना बंद कर दिया है?
मिंग

1
मेरे लिए या तो काम नहीं किया है
आईओएस

8

संपादित करें: Apple द्वारा प्रलेखित हालांकि मैं वास्तव में इसे काम करने के लिए नहीं प्राप्त कर सका: कीबोर्ड डिस्प्ले के साथ WKWebView व्यवहार : "iOS 10 में, WKWebView ऑब्जेक्ट सफारी के मूल व्यवहार से मेल खाता है, जब उनके कीबोर्ड को दिखाया जाता है। घटनाओं का आकार बदलें "(शायद आकार बदलने के बजाय कीबोर्ड का पता लगाने के लिए फोकस या फोकस प्लस विलंब का उपयोग कर सकते हैं)।

संपादित करें: कोड बाहरी कीबोर्ड नहीं, बल्कि ऑनस्क्रीन कीबोर्ड निर्धारित करता है। इसे छोड़कर क्योंकि जानकारी दूसरों के लिए उपयोगी हो सकती है जो केवल ऑनस्क्रीन कीबोर्ड के बारे में परवाह करते हैं। पृष्ठ params देखने के लिए http://jsbin.com/AbimiQup/4 का उपयोग करें ।

हम यह देखने के लिए परीक्षण करते हैं कि क्या वह document.activeElementतत्व है जो कीबोर्ड दिखाता है (इनपुट प्रकार = पाठ, टेक्स्टारिया, आदि)।

निम्नलिखित कोड हमारे उद्देश्यों के लिए चीजों को ठगता है (हालांकि आम तौर पर सही नहीं है)।

function getViewport() {
    if (window.visualViewport && /Android/.test(navigator.userAgent)) {
        // https://developers.google.com/web/updates/2017/09/visual-viewport-api    Note on desktop Chrome the viewport subtracts scrollbar widths so is not same as window.innerWidth/innerHeight
        return {
            left: visualViewport.pageLeft,
            top: visualViewport.pageTop,
            width: visualViewport.width,
            height: visualViewport.height
        };
    }
    var viewport = {
            left: window.pageXOffset,   // http://www.quirksmode.org/mobile/tableViewport.html
            top: window.pageYOffset,
            width: window.innerWidth || documentElement.clientWidth,
            height: window.innerHeight || documentElement.clientHeight
    };
    if (/iPod|iPhone|iPad/.test(navigator.platform) && isInput(document.activeElement)) {       // iOS *lies* about viewport size when keyboard is visible. See http://stackoverflow.com/questions/2593139/ipad-web-app-detect-virtual-keyboard-using-javascript-in-safari Input focus/blur can indicate, also scrollTop: 
        return {
            left: viewport.left,
            top: viewport.top,
            width: viewport.width,
            height: viewport.height * (viewport.height > viewport.width ? 0.66 : 0.45)  // Fudge factor to allow for keyboard on iPad
        };
    }
    return viewport;
}


function isInput(el) {
    var tagName = el && el.tagName && el.tagName.toLowerCase();
    return (tagName == 'input' && el.type != 'button' && el.type != 'radio' && el.type != 'checkbox') || (tagName == 'textarea');
};

उपरोक्त कोड केवल अनुमानित है: यह विभाजित कीबोर्ड, अनकॉक्ड कीबोर्ड, भौतिक कीबोर्ड के लिए गलत है। शीर्ष पर टिप्पणी के अनुसार, आप window.innerHeightप्रॉपर्टी का उपयोग करके सफारी (iOS8 के बाद से) या WKWebView (iOS10 के बाद से) पर दिए गए कोड से बेहतर काम करने में सक्षम हो सकते हैं।

मुझे अन्य परिस्थितियों में विफलताएं मिली हैं: उदाहरण के लिए इनपुट पर ध्यान दें फिर होम स्क्रीन पर जाएं फिर पृष्ठ पर वापस आएं; iPad को व्यूपोर्ट को छोटा नहीं बनाना चाहिए; पुराने IE ब्राउज़र काम नहीं करेंगे, ओपेरा काम नहीं करता है क्योंकि कीबोर्ड बंद होने के बाद ओपेरा तत्व पर ध्यान केंद्रित करता है।

हालाँकि टैग किए गए उत्तर (ऊंचाई को मापने के लिए स्क्रॉलटॉप) में बुरा यूआई साइड इफेक्ट्स होते हैं यदि व्यूपोर्ट जूमेबल (या वरीयताओं में सक्षम बल-ज़ूम)। मैं अन्य सुझाए गए समाधान (स्क्रॉलटॉप को बदलते हुए) का उपयोग नहीं करता, क्योंकि iOS पर, जब व्यूपोर्ट ज़ूम करने योग्य होता है और फ़ोकस किए गए इनपुट पर स्क्रॉल होता है, तो स्क्रॉलिंग और ज़ूम और फ़ोकस (जो व्यूपोर्ट के बाहर एक फ़ोकस किए गए इनपुट को छोड़ सकते हैं) के बीच छोटी-छोटी बातचीत होती है - नहीं दृश्य)।


जब कुछ तत्व बिल्कुल तैनात होते हैं, तो फुलस्क्रीन ब्रेक का पता लगाने के लिए इनरहाइट पर निर्भर करता है। विश्वसनीय नहीं है।
उडो

5

केवल Android 4.1.1 पर परीक्षण किया गया:

कलंक घटना कीबोर्ड को ऊपर और नीचे परीक्षण करने के लिए एक विश्वसनीय घटना नहीं है क्योंकि उपयोगकर्ता उस कीबोर्ड को स्पष्ट रूप से छिपाने के विकल्प के रूप में है जो कीबोर्ड को दिखाने के लिए फ़ील्ड पर एक धब्बा घटना को ट्रिगर नहीं करता है।

हालांकि घटना का आकार परिवर्तन एक आकर्षण की तरह काम करता है यदि कीबोर्ड किसी कारण से ऊपर या नीचे आता है।

कॉफ़ी:

$(window).bind "resize", (event) ->  alert "resize"

किसी भी समय कीबोर्ड किसी भी कारण से दिखाया या छिपाया जाता है।

हालाँकि, एंड्रॉइड ब्राउज़र (ऐप के बजाय) के मामले में ध्यान दें कि एक वापस लेने योग्य url बार है, जो कि रिट्रेक्ट होने पर आग का आकार नहीं बदलता है, फिर भी उपलब्ध विंडो का आकार नहीं बदलता है।


+1 ब्लर इवेंट के लिए कीबोर्ड को मैन्युअल रूप से खारिज करने पर फायरिंग नहीं। आकार बदलना एक अच्छा विचार है और यह Android उपकरणों के लिए अच्छा काम करेगा।
अंकित गर्ग

पुष्टि कर सकते हैं कि यह एक iPhone 5 (iOS 6.0.2) और एक iPad 3 (iOS 6.0) दोनों पर काम करता है।
डिएगो अगुलो

1
बस क्रॉसब्रोस् टेरिंग पर iOS6 पर क्रोम 41 पर परीक्षण किया गया - वर्चुअल कीबोर्ड दिखने या गायब होने से आकार परिवर्तन नहीं होता है।
Dan Dascalescu

4

कीबोर्ड का पता लगाने के बजाय, खिड़की के आकार का पता लगाने का प्रयास करें

यदि खिड़की की ऊंचाई कम हो गई थी, और चौड़ाई अभी भी समान है, तो इसका मतलब है कि कीबोर्ड चालू है। कीबोर्ड बंद है, आप यह भी जोड़ सकते हैं कि परीक्षण करें कि कोई इनपुट फ़ील्ड फ़ोकस पर है या नहीं।

उदाहरण के लिए इस कोड का प्रयास करें।

var last_h = $(window).height(); //  store the intial height.
var last_w = $(window).width(); //  store the intial width.
var keyboard_is_on = false;
$(window).resize(function () {
    if ($("input").is(":focus")) {
        keyboard_is_on =
               ((last_w == $(window).width()) && (last_h > $(window).height()));
    }   
});     

2
यह अब iOS 8 में काम नहीं करता है। कीबोर्ड कंटेंट को ओवरलैप करता है और कई मामलों में कंटेंट शुरू में इनपुट फील्ड्स को ध्यान में रखते हुए स्क्रॉल करता है।
रिक स्ट्राल

3
IOS6 window.height में कीबोर्ड के खुलने के बाद से विंडो की ऊंचाई, iOS 7 में कीबोर्ड सहित ऊंचाई को लौटाती है।
Michiel

1
ध्यान दें कि स्क्रॉल करते समय शीर्ष पता बार स्क्रीन के अंदर और बाहर स्लाइड करता है। आपको एक न्यूनतम ऊंचाई परिवर्तन जोड़ना चाहिए, मैं कहूंगा, 200px (परीक्षण नहीं किया गया)।
oriadam

1

यह समाधान स्क्रॉल स्थिति को याद करता है

    var currentscroll = 0;

    $('input').bind('focus',function() {
        currentscroll = $(window).scrollTop();
    });

    $('input').bind('blur',function() {
        if(currentscroll != $(window).scrollTop()){

        $(window).scrollTop(currentscroll);

        }
    });

1

इसको आजमाओ:

var lastfoucsin;

$('.txtclassname').click(function(e)
{
  lastfoucsin=$(this);

//the virtual keyboard appears automatically

//Do your stuff;

});


//to check ipad virtual keyboard appearance. 
//First check last focus class and close the virtual keyboard.In second click it closes the wrapper & lable

$(".wrapperclass").click(function(e)
{

if(lastfoucsin.hasClass('txtclassname'))
{

lastfoucsin=$(this);//to avoid error

return;

}

//Do your stuff 
$(this).css('display','none');
});`enter code here`

1

जैसा कि पिछले उत्तरों में बताया गया है कि window.innerHeight वैरिएबल iOS10 पर अब ठीक से अपडेट हो जाता है जब कीबोर्ड दिखाई देता है और चूंकि मुझे पहले के संस्करणों के लिए समर्थन की आवश्यकता नहीं है तो मैं निम्नलिखित हैक के साथ आया था जो थोड़ा आसान हो सकता है फिर चर्चा की गई "समाधान"।

//keep track of the "expected" height
var windowExpectedSize = window.innerHeight;

//update expected height on orientation change
window.addEventListener('orientationchange', function(){
    //in case the virtual keyboard is open we close it first by removing focus from the input elements to get the proper "expected" size
    if (window.innerHeight != windowExpectedSize){
        $("input").blur();
        $("div[contentEditable]").blur();     //you might need to add more editables here or you can focus something else and blur it to be sure
        setTimeout(function(){
            windowExpectedSize = window.innerHeight;
        },100);
    }else{
        windowExpectedSize = window.innerHeight;
    }
});

//and update the "expected" height on screen resize - funny thing is that this is still not triggered on iOS when the keyboard appears
window.addEventListener('resize', function(){
    $("input").blur();  //as before you can add more blurs here or focus-blur something
    windowExpectedSize = window.innerHeight;
});

तो आप उपयोग कर सकते हैं:

if (window.innerHeight != windowExpectedSize){ ... }

यह देखने के लिए कि क्या कीबोर्ड दिखाई दे रहा है। मैं अपने वेब ऐप में अब कुछ समय के लिए इसका उपयोग कर रहा हूं और यह अच्छी तरह से काम करता है, लेकिन (अन्य सभी समाधानों के रूप में) आपको ऐसी स्थिति मिल सकती है जहां यह विफल हो जाता है क्योंकि "अपेक्षित" आकार ठीक से अपडेट नहीं किया गया है या कुछ और।


मैं उम्मीद कर रहा था कि यह मामला था, लेकिन नहीं, यह अपडेट नहीं होता है।
सैम केसर

0

मैंने कुछ खोज की, और मुझे "कीबोर्ड पर दिखाए गए" या "बर्खास्त किए गए कीबोर्ड पर" के लिए कुछ भी ठोस नहीं मिला। समर्थित घटनाओं की आधिकारिक सूची देखें । आईपैड के लिए तकनीकी नोट TN2262 भी देखें । जैसा कि आप शायद पहले से ही जानते हैं, एक शरीर घटना है जो onorientationchangeआप परिदृश्य / चित्र का पता लगाने के लिए तार कर सकते हैं।

इसी तरह, लेकिन एक जंगली अनुमान ... क्या आपने आकार बदलने की कोशिश की है? व्यूपोर्ट परिवर्तन उस घटना को अप्रत्यक्ष रूप से कीबोर्ड से दिखाया / छिपाया जा सकता है।

window.addEventListener('resize', function() { alert(window.innerHeight); });

जो किसी भी आकार परिवर्तन की घटना पर नई ऊंचाई को सचेत करेगा।


10
दुर्भाग्य से, मेरे परीक्षणों में, कीबोर्ड ने आकार बदलने वाली घटना को ट्रिगर नहीं किया।
LKM

0

मैंने स्वयं इसका प्रयास नहीं किया है, इसलिए इसका सिर्फ एक विचार है ... लेकिन क्या आपने सीएसएस के साथ मीडिया के प्रश्नों का उपयोग करके यह देखने की कोशिश की है कि खिड़की की ऊंचाई कब बदलती है और फिर उसके लिए डिज़ाइन को बदलते हैं? मुझे लगता है कि सफारी मोबाइल खिड़की के हिस्से के रूप में कीबोर्ड को नहीं पहचान रहा है ताकि उम्मीद है कि काम करेगा।

उदाहरण:

@media all and (height: 200px){
    #content {height: 100px; overflow: hidden;}
}

2
बहुत चतुर विचार। दुर्भाग्य से, मेरे परीक्षणों में, कीबोर्ड को दिखाने से मीडिया के प्रश्नों का मूल्यांकन करने के लिए उपयोग किए जाने वाले ऊंचाई मूल्यों पर कोई असर नहीं पड़ा।
एलकेएम

मैं पुष्टि कर सकता हूं: ऊंचाई: 250px मेरे लिए काम किया (एंड्रॉइड पर, कम से कम)।
वुड्रोशाइगरु

0

समस्या यह है कि, 2014 में भी, डिवाइस स्क्रीन आकार के ईवेंट को हैंडल करते हैं, साथ ही स्क्रॉल इवेंट, असंगत रूप से जबकि नरम कीबोर्ड खुला होता है।

मैंने पाया है कि, भले ही आप एक ब्लूटूथ कीबोर्ड का उपयोग कर रहे हों, विशेष रूप से iOS कुछ अजीब लेआउट बग को ट्रिगर करता है; इसलिए एक नरम कीबोर्ड का पता लगाने के बजाय, मुझे बस उन उपकरणों को लक्षित करना है जो बहुत संकीर्ण हैं और टचस्क्रीन है।

मैं मीडिया क्वेरी (या window.matchMedia चौड़ाई का पता लगाने और के लिए) Modernizr स्पर्श घटना का पता लगाने के लिए।


0

शायद आपके ऐप की सेटिंग में एक चेकबॉक्स होना आसान है जहां उपयोगकर्ता 'बाहरी कीबोर्ड संलग्न' कर सकता है।

छोटे प्रिंट में, उपयोगकर्ता को समझाएं कि बाहरी कीबोर्ड वर्तमान में आज के ब्राउज़रों में पता लगाने योग्य नहीं हैं।


1
टॉगल को इस तरह जोड़ना एक अंतिम उपाय है जिसे तब तक स्वीकार्य नहीं माना जाना चाहिए जब तक कि कोई अन्य समाधान न हो जो ऐप को तोड़ नहीं देगा। यह ऐसा कुछ नहीं है जो एक कामकाजी ऐप बनाने के लिए अवरोधक होना चाहिए।
एडम लेगेट

-2

ठीक है, आप यह पता लगा सकते हैं कि आपके इनपुट बक्से का फोकस कब है, और आप कीबोर्ड की ऊंचाई जानते हैं। स्क्रीन का ओरिएंटेशन पाने के लिए सीएसएस भी उपलब्ध है, इसलिए मुझे लगता है कि आप इसे हैक कर सकते हैं।

आप किसी भी तरह से एक भौतिक कीबोर्ड के मामले को संभालना चाहेंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.