iOS 11 सफारी बूटस्ट्रैप मोडल टेक्स्ट एरिया कर्सर के बाहर


85

IOS 11 सफारी के साथ, इनपुट टेक्स्टबॉक्स कर्सर इनपुट टेक्स्टबॉक्स के बाहर हैं। हमें यह नहीं मिला कि यह समस्या क्यों है। जैसा कि आप देख सकते हैं कि मेरा केंद्रित टेक्स्ट बॉक्स ईमेल टेक्स्ट इनपुट है, लेकिन मेरा कर्सर इसके बाहर है। यह केवल iOS 11 सफारी के साथ होता है

मुसीबत


1
यह सफारी के साथ एक बग है। Apple ने इसे आंतरिक रूप से तय कर दिया है, लेकिन फिक्स अभी तक iOS के एक सार्वजनिक (या बीटा) रिलीज़ में नहीं है। Bugs.webkit.org/show_bug.cgi?id=176896
बीटल

जवाबों:


69

मैंने position:fixedएक मोडल खोलते समय शरीर को जोड़कर समस्या को ठीक किया । आशा है कि यह आपकी मदद करेगा।


6
नीचे दिए गए जवाबों पर ध्यान दें - बूटस्ट्रैप जोड़ता है। मोडल के खुले होने पर शरीर से खुला-खुला, इसलिए आप बस उस स्थिति को जोड़ सकते हैं: जो उस वर्ग के लिए नियत है।
टिमिक

1
आपको width:100%डिवाइस की चौड़ाई के लिए शरीर की चौड़ाई को जोड़ने के लिए भी जोड़ना पड़ सकता है । कुछ मामलों में, मौजूदा मार्कअप के आधार पर, यह एक मुद्दा हो सकता है। मुझे @gentleboy (नीचे) द्वारा समाधान भी पसंद है ताकि समस्या के बिना अन्य ब्राउज़रों को दंडित न करें, क्योंकि जब शरीर को निर्धारित करने के लिए शरीर को शीर्ष पर स्क्रॉल करने का कारण बनता है, जो कुछ हद तक कष्टप्रद है।
Redtopia

अजीब बात है, मैं उल्का-घेरा के साथ एक आवेदन निर्माण के साथ यह मुद्दा था। ऐसा लग रहा था कि किसी भी iOS डिवाइस में v11 + चल रहा है। मेरे मामले में मैंने पहले ही position:fixedआवेदन के निकाय को आवेदन कर दिया था। इसके बजाय मैंने इसे तत्व position:absoluteपर बदल दिया htmlऔर इसने मेरा मुद्दा ठीक कर दिया। थैंक यू जेन!
एडम रॉस

1
यह हमारे लिए मोडल रूपों का अंत हो सकता है। यहां तक ​​कि अगर Apple समस्या को ठीक करता है, तो यह उपयोगकर्ता के लिए काम करने के रूप को देखने के लिए अपने डिवाइस को अपडेट करने के लिए होगा। क्या इसे ठीक करने का एक आसान सार्वभौमिक तरीका नहीं है? एक पॉली फिल के बारे में क्या?
पढ़ें

1
आपने मेरी जान बचाई <3
क्रिस्टियन बी।

42

व्यक्तिगत रूप से, position: fixed शीर्ष पर स्वचालित रूप से स्क्रॉल करें । काफी कष्टप्रद !

अन्य उपकरणों और संस्करणों को दंडित करने से बचने के लिए, मैं केवल आईओएस के उपयुक्त संस्करणों के लिए इस फिक्स को लागू करता हूं।


** संस्करण 1 - सभी तरीके ठीक हैं **

जावास्क्रिप्ट / jQuery के लिए

$(document).ready(function() {

    // Detect ios 11_x_x affected  
    // NEED TO BE UPDATED if new versions are affected
    var ua = navigator.userAgent,
    iOS = /iPad|iPhone|iPod/.test(ua),
    iOS11 = /OS 11_0|OS 11_1|OS 11_2/.test(ua);

    // ios 11 bug caret position
    if ( iOS && iOS11 ) {

        // Add CSS class to body
        $("body").addClass("iosBugFixCaret");

    }

});

सीएसएस के लिए

/* Apply CSS to iOS affected versions only */
body.iosBugFixCaret.modal-open { position: fixed; width: 100%; }

** संस्करण 2 - केवल चयनित मॉड्यूल

मैंने केवल एक वर्ग के साथ चयनित मॉड्यूल के लिए आग को संशोधित किया .inputModal

स्क्रॉल से बचने के लिए इनपुट के साथ केवल मॉडल्स को प्रभावित किया जाना चाहिए।

जावास्क्रिप्ट / jQuery के लिए

$(document).ready(function() {

    // Detect ios 11_x_x affected
    // NEED TO BE UPDATED if new versions are affected 
    (function iOS_CaretBug() {

        var ua = navigator.userAgent,
        scrollTopPosition,
        iOS = /iPad|iPhone|iPod/.test(ua),
        iOS11 = /OS 11_0|OS 11_1|OS 11_2/.test(ua);

        // ios 11 bug caret position
        if ( iOS && iOS11 ) {

            $(document.body).on('show.bs.modal', function(e) {
                if ( $(e.target).hasClass('inputModal') ) {
                    // Get scroll position before moving top
                    scrollTopPosition = $(document).scrollTop();

                    // Add CSS to body "position: fixed"
                    $("body").addClass("iosBugFixCaret");
                }
            });

            $(document.body).on('hide.bs.modal', function(e) {
                if ( $(e.target).hasClass('inputModal') ) {         
                    // Remove CSS to body "position: fixed"
                    $("body").removeClass("iosBugFixCaret");

                    //Go back to initial position in document
                    $(document).scrollTop(scrollTopPosition);
                }
            });

        }
    })();
});

सीएसएस के लिए

/* Apply CSS to iOS affected versions only */
body.iosBugFixCaret.modal-open { position: fixed; width: 100%; }

HTML के लिए मॉडल में वर्ग इनपुटमॉडल जोड़ें

<div class="modal fade inputModal" tabindex="-1" role="dialog">
    ...
</div>

नोटा ने जावास्क्रिप्ट समारोह अब आत्म-आह्वान है


** अद्यतन iOS 11.3 - बग सुधारा 11 **

IOS 11.3 के रूप में, बग को ठीक कर दिया गया है। के लिए परीक्षण करने की कोई आवश्यकता नहीं OS 11_हैiOS11 = /OS 11_0|OS 11_1|OS 11_2/.test(ua);

लेकिन सावधान रहें क्योंकि iOS 11.2 अभी भी व्यापक रूप से उपयोग किया जाता है (अप्रैल 2018 तक)। देख

प्रतिमा १

प्रतिमा २


2
अच्छी सलाह है। मेरे पास यह मुद्दा नहीं है, लेकिन मुझे लगता है कि यह उत्तर के रूप में वैश्विक हो सकता है। मैं अपने बियर खत्म होने के बाद इसे
जोड़ूंगा

3
@gentleboy किसी भी OS 11 को खोजने के लिए REGEX का उपयोग क्यों नहीं किया जाता है? तो इस तरह से आपको प्रत्येक OS 11 को अपने कोड में अपडेट नहीं करना होगा? कुछ इस तरहiOS11 = /OS 11_(\d{1,2})(_{0,1})(\d{1,2})/.test(us);
T. Evans

1
@ रौनक ऐसा लगता है कि यह अभी भी बीटा 11.2 और 11.3 में मौजूद है bugs.webkit.org के
micaball

2
@ T.Evans जो regex काम नहीं करता है। एक सही रेगेक्स कुछ इस तरह हो सकता है:ios11 = /OS 11_(\d{1,2})/.test(ua);
अब्राहम

2
निर्धारित स्थिति अभी भी शीर्ष पर दस्तावेज़ / बॉडी स्क्रॉल ले जाएगी। एक बार मोडल बंद होने पर मैं मोडल ओपन और रीडड स्क्रॉल टॉप मान पर वर्तमान स्क्रॉलटॉप स्थिति को हथियाने का सुझाव देता हूं। इस तरह jsfiddle.net/im4aLL/hmvget9x/1
HADI

15

यह समस्या बूटस्ट्रैप से परे है, और सिर्फ सफारी से परे है। यह iOS 11 में एक पूर्ण डिस्प्ले बग है जो सभी ब्राउज़रों में होता है। उपरोक्त सुधार सभी मामलों में इस समस्या को ठीक नहीं करता है।

बग के बारे में यहां विस्तार से बताया गया है:

https://medium.com/@eirik.luka/how-to-fix-the-ios-11-input-element-in-fixed-modals-bug-aaf66c7ba3f8

माना जाता है कि उन्होंने पहले ही इसे बग के रूप में Apple को रिपोर्ट कर दिया था।


यह मेरे लिए मुद्दा लगता है, IOS 11 को अपडेट करने से पहले ठीक काम कर रहा था। एंड्रॉइड उपयोगकर्ताओं को समस्या नहीं हो रही है।
हैकिंगकेमिस्ट

11

निराश बग, इसे पहचानने के लिए धन्यवाद। अन्यथा, मैं दीवार के खिलाफ अपना आईफोन या अपना सिर पीट रहा हूं।

सबसे सरल निर्धारण है (कोड परिवर्तन की 1 पंक्ति):

बस नीचे दिए गए CSS को html या किसी बाहरी css फ़ाइल में जोड़ें।

<style type="text/css">
.modal-open { position: fixed; }
</style>

यहाँ एक पूर्ण कार्य उदाहरण है:

.modal-open { position: fixed; }
<link href="https://getbootstrap.com/docs/3.3/dist/css/bootstrap.min.css" rel="stylesheet">

<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" data-whatever="@mdo">Open modal for @mdo</button>
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" data-whatever="@fat">Open modal for @fat</button>
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" data-whatever="@getbootstrap">Open modal for @getbootstrap</button>
...more buttons...

<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
        <h4 class="modal-title" id="exampleModalLabel">New message</h4>
      </div>
      <div class="modal-body">
        <form>
          <div class="form-group">
            <label for="recipient-name" class="control-label">Recipient:</label>
            <input type="text" class="form-control" id="recipient-name">
          </div>
          <div class="form-group">
            <label for="message-text" class="control-label">Message:</label>
            <textarea class="form-control" id="message-text"></textarea>
          </div>
        </form>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Send message</button>
      </div>
    </div>
  </div>
</div>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script src="https://getbootstrap.com/docs/3.3/dist/js/bootstrap.min.js"></script>

मैंने यहां एक मुद्दा प्रस्तुत किया: https://github.com/twbs/bootstrap/issues/24059


इसका उत्तर होना चाहिए। बूटस्ट्रैप एक मोडल दिखाई देने पर मोडल-ओपन क्लास को शरीर में जोड़ता है। आपको बस उस वर्ग को लक्षित करने की आवश्यकता है।
21

1
मैं कुछ समय से इस मुद्दे से निपट रहा हूं। यह समाधान मेरे लिए अपर्याप्त है क्योंकि स्थिति को निर्धारित करने से पृष्ठ शीर्ष पर वापस स्क्रॉल करता है। इसलिए जब उपयोगकर्ता मॉडल बंद कर देता है, तो वे एक अलग स्क्रॉल स्थिति पर होते हैं। एक भयानक उपयोगकर्ता अनुभव में यह होता है
Nearpoint

इस फिक्स ने मोबाइल पर क्रोम का उपयोग करने में मेरे लिए काम किया। पहले से उलझन में था। मोडल-ओपन मोडल html में दिखाई नहीं देता है, लेकिन मैंने इसे अपने हेडर में सीएसएस के रूप में वैसे भी जोड़ा और यह काम किया।
डेविड

4

सबसे आसान / सबसे साफ समाधान:

body.modal-open { position: fixed; width: 100%; }

1
यह सबसे आसान समाधान है, और यह काम करता है, लेकिन एकमात्र समस्या यह है कि कर्सर पूरी तरह से गायब हो जाता है। यह शुरुआती स्थिति जितना खराब नहीं है, लेकिन एक प्रयोज्य समस्या है।
tmo256

अजीब, मुझे गायब होने वाले कर्सर का अनुभव नहीं हुआ
lfkwtz

1
मुझे गायब होने वाले कर्सर का भी अनुभव हुआ, किसी भी विचार के साथ कि ऐसा क्यों हो सकता है?
एलेक्स बर्गोस

4
हाँ, मैं भी सिर्फ पहली फ़ोकस इवेंट के लिए एक गायब कर्सर देख रहा हूँ। बाद के इनपुट फ़ोकस में कर्सर दिखाई दे रहा है। बहुत अजीब। यह केवल सफारी पर iOS में हो रहा है।
डेविन वॉकर

@DevinWalker क्या तुम लोगों ने कभी गायब कर्सर समस्या को हल किया है?
अनुदान

3

IOS 11.3 में अपने ऐप्पल डिवाइस को अपडेट करने के बाद यह समस्या अब प्रतिलिपि प्रस्तुत करने योग्य नहीं है


आपका क्या मतलब है, Apple ने इसे ठीक किया?
स्टार्सक्रीम

1
@Starscream हाँ यह इस सॉफ़्टवेयर संस्करण (iOS 11.3) के साथ ऐप्पल द्वारा तय किया गया है
ईशान 10'18

2

जोड़े position: fixed;को bodyजब मोडल खुला है।

$(document).ready(function($){
    $("#myBtn").click(function(){
        $("#myModal").modal("show");
    });
    $("#myModal").on('show.bs.modal', function () {
        $('body').addClass('body-fixed');
    });
    $("#myModal").on('hide.bs.modal', function () {
        $('body').removeClass('body-fixed');
    });
});
.body-fixed {
    position: fixed;
    width: 100%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>

<button type="button" class="btn btn-info btn-lg" id="myBtn">Open Modal</button>

<!-- Modal -->
<div class="modal fade" id="myModal" role="dialog">
	<div class="modal-dialog">
		<div class="modal-content">
			<div class="modal-header">
				<button type="button" class="close" data-dismiss="modal">&times;</button>
				<h4 class="modal-title">Form</h4>
			</div>
			<div class="modal-body">
				<div class="form-group">
					<label class="control-label">Input #1</label>
					<input type="text" class="form-control">
				</div>
				<div class="form-group">
					<label class="control-label">Input #2</label>
					<input type="text" class="form-control">
				</div>
				<div class="form-group">
					<label class="control-label">Input #3</label>
					<input type="text" class="form-control">
				</div>
				<div class="form-group">
					<label class="control-label">Input #4</label>
					<input type="text" class="form-control">
				</div>
			</div>
			<div class="modal-footer">
				<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
			</div>
		</div>
	</div>
</div>


1
इस धागे पर अन्य समाधानों के समान, एक बार जब मोडल बंद हो जाता है - आप फिर से शीर्ष पर वापस आ जाते हैं। उदाहरण के लिए: उपयोगकर्ता आइटम के ग्रिड के माध्यम से स्क्रॉल करता है, एक मोडल में विवरण लॉन्च करता है .. और इस फिक्स के साथ, जब वे मोडल को बंद करते हैं .. वे एक बार फिर से आइटम के ग्रिड के शीर्ष पर होते हैं और फिर से स्क्रॉल करना होगा
bkwdesign

2
मेरे iPhone 7 प्लस पर, यह फिक्स मेरे कर्सर को पूरी तरह से गायब कर देता है
bkwdesign

1

उन समाधानों का उपयोग करने position: fixedऔर स्थिति सुधार scrollTopकार्य के आधार पर वास्तव में अच्छी तरह से करते हैं, लेकिन कुछ लोगों (मेरे सहित) को एक और मुद्दा मिला: इनपुट ध्यान केंद्रित करने पर कीबोर्ड कैरेट / कर्सर नहीं दिखा रहा है।

मैंने देखा कि कैरेट / कर्सर तभी काम करता है जब हम शरीर पर प्रयोग नहीं करते position: fixedहैं। तो कई चीजें कोशिश कर के बाद, मैं इस दृष्टिकोण का उपयोग कर पर छोड़ दिया और उपयोग करने का फैसला किया position: relativeपर bodyइस्तेमाल करते हैं और scrollTopसही करने के लिए मॉडल के शीर्ष स्थान के बजाय।

नीचे देखें कोड:

var iosScrollPosition = 0;

function isIOS() {
   // use any implementation to return true if device is iOS
}

function initModalFixIOS() {
    if (isIOS()) {
        // Bootstrap's fade animation does not work with this approach
        // iOS users won't benefit from animation but everything else should work
        jQuery('#myModal').removeClass('fade');
    }
}

function onShowModalFixIOS() {
    if (isIOS()) {
        iosScrollPosition = jQuery(window).scrollTop();
        jQuery('body').css({
            'position': 'relative', // body is now relative
            'top': 0
        });
        jQuery('#myModal').css({
            'position': 'absolute', // modal is now absolute
            'height': '100%',
            'top': iosScrollPosition // modal position correction
        });
        jQuery('html, body').css('overflow', 'hidden'); // prevent page scroll
    }
}

function onHideModalFixIOS() {
    // Restore everything
    if (isIOS()) {
        jQuery('body').css({
            'position': '',
            'top': ''
        });
        jQuery('html, body').scrollTop(iosScrollPosition);
        jQuery('html, body').css('overflow', '');
    }
}

jQuery(document).ready(function() {
    initModalFixIOS();
    jQuery('#myModal')
        .on('show.bs.modal', onShowModalFixIOS)
        .on('hide.bs.modal', onHideModalFixIOS);
});

0

जैसा कि पहले उल्लेख किया गया है: इस मुद्दे को हल करने के लिए style.position propertyकी स्थापना ।bodyfixediOS cursor misplacement

हालाँकि, यह लाभ पृष्ठ के शीर्ष पर जबरन स्क्रॉल किए जाने की लागत पर आता है।

सौभाग्य से, इस नई UXसमस्या का लाभ बिना ओवरहेड द्वारा लीवरेजिंग के HTMLElement.styleऔर अधिक किया जा सकता है window.scrollTo()

मूल सार तत्व के scroll to topहेरफेर द्वारा प्रतिकार करना है जब । यह चर द्वारा पकड़े गए मूल्य का उपयोग करके किया जाता है ।bodystyle.topmountingYOffsetygap

वहां से यह बस रीसेट करने की बात है body's style.topकरने के लिए 0और का उपयोग कर उपयोगकर्ता के दृष्टिकोण reframing window.scrollTo(0, ygap)जब dismounting

व्यावहारिक उदाहरण के लिए नीचे देखें।

// Global Variables (Manage Globally In Scope).
const body = document.querySelector('body') // Body.
let ygap = 0 // Y Offset.


// On Mount (Call When Mounting).
const onModalMount = () => {

  // Y Gap.
  ygap = window.pageYOffset || document.documentElement.scrollTop

  // Fix Body.
  body.style.position = 'fixed'

  // Apply Y Offset To Body Top.
  body.style.top = `${-ygap}px`

}


// On Dismount (Call When Dismounting).
const onModalDismount = () => {

  // Unfix Body.
  body.style.position = 'relative'

  // Reset Top Offset.
  body.style.top = '0'

  // Reset Scroll.
  window.scrollTo(0, ygap)

}

क्या आपके पास इसके लिए अधिक विस्तृत उदाहरण है? मैं अनुमान लगा रहा हूं कि मेरे पास एक फ़ंक्शन में माउंट होगा जिसे मोडल खुलने पर कहा जाता है, और फिर डिस्माउंट को एक फ़ंक्शन में डाल दिया और कॉल किया कि जब मोडल बंद हो।
नील जोन्स

आह यप। मुझे पता है तुम्हारा क्या मतलब है। कृपया संशोधित समाधान के लिए ऊपर देखें। इसके अलावा, हाँ आशय आप उन कॉल करने के लिए है functionsजब mountingऔर dismounting। धन्यवाद।
अरमान चरण

-1

किसी को भी वेनिला js में सुधार के लिए देख रहा है जो IOS> 11.2 पर काम करता है और किसी अतिरिक्त CSS की आवश्यकता नहीं है:

(function() {
    if (!/(iPhone|iPad|iPod).*(OS 11_[0-2]_[0-5])/.test(navigator.userAgent)) return

    document.addEventListener('focusin', function(e) {
        if (!e.target.tagName == 'INPUT' && !e.target.tagName != 'TEXTAREA') return
        var container = getFixedContainer(e.target)
        if (!container) return
        var org_styles = {};
        ['position', 'top', 'height'].forEach(function(key) {
            org_styles[key] = container.style[key]
        })
        toAbsolute(container)
        e.target.addEventListener('blur', function(v) {
            restoreStyles(container, org_styles)
            v.target.removeEventListener(v.type, arguments.callee)
        })
    })

    function toAbsolute(modal) {
        var rect = modal.getBoundingClientRect()
        modal.style.position = 'absolute'
        modal.style.top = (document.body.scrollTop + rect.y) + 'px'
        modal.style.height = (rect.height) + 'px'
    }

    function restoreStyles(modal, styles) {
        for (var key in styles) {
            modal.style[key] = styles[key]
        }
    }

    function getFixedContainer(elem) {
        for (; elem && elem !== document; elem = elem.parentNode) {
            if (window.getComputedStyle(elem).getPropertyValue('position') === 'fixed') return elem
        }
        return null
    }
})()

यह क्या है:

  1. जाँच करें कि क्या ब्राउज़र iOS 11.0.0 - 11.2.5 पर सफारी है
  2. focusinपृष्ठ पर किसी भी घटना के लिए सुनो
  3. यदि केंद्रित तत्व एक inputया एक है textareaऔर fixedस्थिति के साथ एक तत्व में निहित है , तो कंटेनर की स्थिति को बदल दें absoluteजबकि संबंधित scrollTopऔर कंटेनर मूल आयाम।
  4. धुंधला होने पर, कंटेनर की स्थिति को पुनर्स्थापित करें fixed

-1

इस समाधान ने iOS पर सभी ब्राउज़रों के लिए मेरे और इसके अच्छे काम के लिए काम किया।

.safari-nav-force{
/* Allows content to fill the viewport and go beyond the bottom */
height: 100%;
overflow-y: scroll;
/* To smooth any scrolling behavior */
-webkit-overflow-scrolling: touch;
}

JavsScript

var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
$('.modal').on('shown.bs.modal', function () {
    if (iOS && $('.modal').hasClass('in')){
        $('html,body').addClass('safari-nav-force');
    }
});
$('.modal').on('hidden.bs.modal', function () {
    if (iOS && !$('.modal').hasClass('in')){
        $('html,body').removeClass('safari-nav-force');
    }
});


-2

मोडल सीएसएस को ओवरराइड करें और इसके positionसे fixedइसे बदलेंabsolute

.modal {
position: absolute !important;
}

1
मेरे परिदृश्य में काम नहीं किया। निरपेक्ष में परिवर्तित होने से MANY पर प्रभाव पड़ सकता है
स्टीव डी

@SteveD - यह काम करने के लिए आपको अपने मॉडल को <body> में जोड़ना चाहिए। और <शरीर> की स्थिति - सापेक्ष होनी चाहिए। और जब यह काम करना चाहिए :)
दान

-3

#modal स्थिति में जोड़ें: निरपेक्ष यह स्थिति से संबंधित भविष्य के मुद्दों को ठीक करता है: फिक्स्ड


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