इस पेज पर यूज़र इंटरफ़ेस के इवेंट और गड़बड़ी के उन इवेंट के बारे में बताया गया है जिन्हें प्रोग्राम के हिसाब से सुना और मैनेज किया जा सकता है.
यूज़र इंटरफ़ेस इवेंट
ब्राउज़र में JavaScript इवेंट के आधार पर होता है. इसका मतलब है कि JavaScript, इवेंट जनरेट करके इंटरैक्शन के जवाब देता है. साथ ही, JavaScript से यह उम्मीद की जाती है कि कोई प्रोग्राम दिलचस्प इवेंट सुने. इवेंट दो तरह के होते हैं:
- उपयोगकर्ता इवेंट, जैसे कि "क्लिक" माउस इवेंट को डीओएम से Maps JavaScript API में भेजा जाता है. ये इवेंट, स्टैंडर्ड डीओएम इवेंट से अलग होते हैं.
- एमवीसी स्थिति में बदलाव की सूचनाओं से, Maps JavaScript API के ऑब्जेक्ट में हुए बदलावों की जानकारी मिलती है. इन सूचनाओं को
property_changed
कन्वेंशन का इस्तेमाल करके नाम दिया जाता है.
हर Maps JavaScript API ऑब्जेक्ट, नाम वाले कई इवेंट एक्सपोर्ट करता है.
कुछ खास इवेंट में दिलचस्पी रखने वाले प्रोग्राम, उन इवेंट के लिए JavaScript इवेंट लिसनर
रजिस्टर करेंगे. साथ ही, जब उन इवेंट को ऑब्जेक्ट पर इवेंट हैंडलर रजिस्टर करने के लिए, addListener()
को
कॉल किया जाएगा, तब उन इवेंट के लिए कोड एक्ज़ीक्यूट किया जाएगा.
नीचे दिया गया नमूना आपको दिखाएगा कि मैप के साथ इंटरैक्ट करने पर, google.maps.Map
से कौनसे इवेंट ट्रिगर होते हैं.
इवेंट की पूरी सूची के लिए, Maps JavaScript API का संदर्भ देखें. हर उस ऑब्जेक्ट के लिए, इवेंट एक अलग सेक्शन में लिस्ट किए जाते हैं जिसमें इवेंट होते हैं.
यूज़र इंटरफ़ेस (यूआई) इवेंट
Maps JavaScript API में कुछ ऑब्जेक्ट, माउस या कीबोर्ड इवेंट जैसे उपयोगकर्ता इवेंट का जवाब देने के लिए डिज़ाइन किए गए हैं. उदाहरण के लिए, यहां कुछ ऐसे उपयोगकर्ता
इवेंट दिए गए हैं जिन्हें google.maps.marker.AdvancedMarkerElement
ऑब्जेक्ट सुन सकता है:
'click'
'drag'
'dragend'
'dragstart'
'gmp-click'
पूरी सूची के लिए, AdvancedMarkerElement क्लास देखें. ये इवेंट, स्टैंडर्ड डीओएम इवेंट जैसे दिख सकते हैं. हालांकि, असल में ये Maps JavaScript API का हिस्सा हैं. अलग-अलग ब्राउज़र में अलग-अलग डीओएम इवेंट मॉडल लागू होते हैं. इसलिए, Maps JavaScript API, अलग-अलग क्रॉस-ब्राउज़र की विशेषताओं को हैंडल किए बिना, डीओएम इवेंट को सुनने और उनका जवाब देने के लिए ये मैकेनिज़्म उपलब्ध कराता है. ये इवेंट, आम तौर पर इवेंट में ऐसे आर्ग्युमेंट भी पास करते हैं जिनमें यूज़र इंटरफ़ेस (यूआई) की कुछ स्थिति (जैसे, माउस की स्थिति) शामिल होती है.
एमवीसी के स्टेटस में बदलाव
एमवीसी ऑब्जेक्ट में आम तौर पर स्थिति होती है. जब भी किसी ऑब्जेक्ट की प्रॉपर्टी बदलती है,
तो Maps JavaScript API, उस इवेंट को ट्रिगर करेगा.
उदाहरण के लिए, मैप का ज़ूम
लेवल बदलने पर एपीआई, मैप पर zoom_changed
इवेंट को ट्रिगर करेगा. स्थिति में होने वाले इन बदलावों को रोकने के लिए,
addListener()
को कॉल करके ऑब्जेक्ट पर इवेंट हैंडलर को भी रजिस्टर किया जा सकता है.
उपयोगकर्ता इवेंट और एमवीसी की स्थिति में किए गए बदलाव एक जैसे दिख सकते हैं. हालांकि, आपको आम तौर पर उन्हें अपने कोड में अलग-अलग तरीके से इस्तेमाल करना है. उदाहरण के लिए, एमवीसी इवेंट अपने इवेंट में आर्ग्युमेंट पास नहीं करते. आपको उस ऑब्जेक्ट के लिए सही getProperty
तरीके का इस्तेमाल करके, एमवीसी स्थिति में बदलाव होने पर उस प्रॉपर्टी की जांच करनी होगी.
इवेंट हैंडल करना
इवेंट की सूचनाएं पाने के लिए रजिस्टर करने के लिए, addListener()
इवेंट हैंडलर का इस्तेमाल करें. इस तरीके में, सुनने के लिए एक इवेंट होता है. साथ ही, तय किए गए किसी इवेंट के होने पर कॉल करने के लिए एक फ़ंक्शन होता है.
उदाहरण: मैप और मार्कर इवेंट
यह कोड, उपयोगकर्ता इवेंट को स्थिति में बदलाव वाले इवेंट के साथ मिलाता है. हम किसी ऐसे मार्कर में इवेंट हैंडलर अटैच करते हैं जो क्लिक करने पर मैप को ज़ूम करता है. हम center
प्रॉपर्टी में बदलाव करने के लिए, मैप में एक इवेंट हैंडलर भी जोड़ते हैं और
center_changed
इवेंट मिलने के तीन सेकंड बाद, मैप को वापस मार्कर में पैन करते हैं:
TypeScript
async function initMap() { // Request needed libraries. const { Map } = await google.maps.importLibrary("maps") as google.maps.MapsLibrary; const { AdvancedMarkerElement } = await google.maps.importLibrary("marker") as google.maps.MarkerLibrary; const myLatlng = { lat: -25.363, lng: 131.044 }; const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 4, center: myLatlng, mapId: "DEMO_MAP_ID", } ); const marker = new google.maps.marker.AdvancedMarkerElement({ position: myLatlng, map, title: "Click to zoom", }); map.addListener("center_changed", () => { // 3 seconds after the center of the map has changed, pan back to the // marker. window.setTimeout(() => { map.panTo(marker.position as google.maps.LatLng); }, 3000); }); marker.addListener("click", () => { map.setZoom(8); map.setCenter(marker.position as google.maps.LatLng); }); } initMap();
JavaScript
async function initMap() { // Request needed libraries. const { Map } = await google.maps.importLibrary("maps"); const { AdvancedMarkerElement } = await google.maps.importLibrary("marker"); const myLatlng = { lat: -25.363, lng: 131.044 }; const map = new google.maps.Map(document.getElementById("map"), { zoom: 4, center: myLatlng, mapId: "DEMO_MAP_ID", }); const marker = new google.maps.marker.AdvancedMarkerElement({ position: myLatlng, map, title: "Click to zoom", }); map.addListener("center_changed", () => { // 3 seconds after the center of the map has changed, pan back to the // marker. window.setTimeout(() => { map.panTo(marker.position); }, 3000); }); marker.addListener("click", () => { map.setZoom(8); map.setCenter(marker.position); }); } initMap();
सैंपल आज़माएं
सलाह: अगर आपको व्यूपोर्ट में बदलाव का पता लगाना है, तो zoom_changed
और center_changed
इवेंट के बजाय किसी खास bounds_changed
इवेंट का इस्तेमाल करें. Maps JavaScript API, बाद के इन इवेंट को अलग-अलग ट्रिगर करता है. इसलिए, हो सकता है कि getBounds()
तब तक काम के नतीजे न बताए, जब तक व्यूपोर्ट को आधिकारिक तौर पर बदल न दिया जाए. अगर आपको ऐसे किसी इवेंट के बाद,
getBounds()
को शामिल होना है, तो इवेंट के बजाय
bounds_changed
इवेंट को सुनना न भूलें.
उदाहरण: आकार में बदलाव करना और खींचना इवेंट
जब किसी आकार में बदलाव किया जाता है या उसे खींचा जाता है, तो कार्रवाई पूरी होने पर इवेंट ट्रिगर होता है. इवेंट की सूची और कुछ कोड स्निपेट के लिए, शेप देखें.
उदाहरण देखें (rectangle-event.html)
यूज़र इंटरफ़ेस (यूआई) इवेंट में ऐक्सेस आर्ग्यूमेंट
Maps JavaScript API के यूज़र इंटरफ़ेस (यूआई) इवेंट, आम तौर पर इवेंट आर्ग्युमेंट को पास करते हैं.
इवेंट की जानकारी सुनने वाला इसे ऐक्सेस कर सकता है. इसमें, इवेंट के दौरान यूज़र इंटरफ़ेस (यूआई) की स्थिति
दिखती है. उदाहरण के लिए, यूज़र इंटरफ़ेस (यूआई) 'click'
इवेंट, आम तौर पर
MouseEvent
को पास करता है. इसमें latLng
प्रॉपर्टी होती है, जो मैप पर
क्लिक की गई जगह के बारे में बताती है. ध्यान दें कि यह व्यवहार, यूज़र इंटरफ़ेस (यूआई) इवेंट के लिए यूनीक होता है. एमवीसी स्थिति में किए गए बदलाव, अपने इवेंट में आर्ग्युमेंट पास नहीं करते.
किसी इवेंट लिसनर में, इवेंट के आर्ग्युमेंट को उसी तरह ऐक्सेस किया जा सकता है जैसे किसी ऑब्जेक्ट की प्रॉपर्टी को ऐक्सेस किया जाता है. नीचे दिए गए उदाहरण में, मैप के लिए इवेंट लिसनर जोड़ा गया है. साथ ही, जब उपयोगकर्ता क्लिक की गई जगह पर मैप पर क्लिक करता है, तो एक मार्कर बनाता है.
TypeScript
async function initMap() { // Request needed libraries. const { Map } = await google.maps.importLibrary("maps") as google.maps.MapsLibrary; const { AdvancedMarkerElement, PinElement } = await google.maps.importLibrary("marker") as google.maps.MarkerLibrary; const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 4, center: { lat: -25.363882, lng: 131.044922 }, mapId: "DEMO_MAP_ID", } ); map.addListener("click", (e) => { placeMarkerAndPanTo(e.latLng, map); }); } function placeMarkerAndPanTo(latLng: google.maps.LatLng, map: google.maps.Map) { new google.maps.marker.AdvancedMarkerElement({ position: latLng, map: map, }); map.panTo(latLng); } initMap();
JavaScript
async function initMap() { // Request needed libraries. const { Map } = await google.maps.importLibrary("maps"); const { AdvancedMarkerElement, PinElement } = await google.maps.importLibrary( "marker", ); const map = new google.maps.Map(document.getElementById("map"), { zoom: 4, center: { lat: -25.363882, lng: 131.044922 }, mapId: "DEMO_MAP_ID", }); map.addListener("click", (e) => { placeMarkerAndPanTo(e.latLng, map); }); } function placeMarkerAndPanTo(latLng, map) { new google.maps.marker.AdvancedMarkerElement({ position: latLng, map: map, }); map.panTo(latLng); } initMap();
सैंपल आज़माएं
इवेंट लिसनर में क्लोज़र का इस्तेमाल करना
किसी इवेंट लिसनर को एक्ज़ीक्यूट करते समय, किसी ऑब्जेक्ट के साथ निजी और स्थायी डेटा, दोनों को अटैच करना अक्सर फ़ायदेमंद होता है. JavaScript पर "निजी" इंस्टेंस डेटा के साथ काम नहीं करता. हालांकि, इसमें बंद शामिल किए जा सकते हैं. इससे इनर फ़ंक्शन को आउटर वैरिएबल ऐक्सेस करने की अनुमति मिलती है. क्लोज़र, इवेंट लिसनर के लिए फ़ायदेमंद होते हैं. इससे उन वैरिएबल को ऐक्सेस किया जा सकता है जो आम तौर पर उन ऑब्जेक्ट से जुड़े नहीं होते हैं जिन पर इवेंट होते हैं.
इस उदाहरण में, इवेंट लिसनर में फ़ंक्शन बंद करने के फ़ंक्शन का इस्तेमाल किया गया है, ताकि मार्कर के सेट को सीक्रेट मैसेज असाइन किया जा सके. हर मार्कर पर क्लिक करने से गुप्त मैसेज का वह हिस्सा दिखेगा जो मार्कर में शामिल नहीं होता.
TypeScript
async function initMap() { // Request needed libraries. const { Map } = await google.maps.importLibrary("maps") as google.maps.MapsLibrary; const { AdvancedMarkerElement } = await google.maps.importLibrary("marker") as google.maps.MarkerLibrary; const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 4, center: { lat: -25.363882, lng: 131.044922 }, mapId: "DEMO_MAP_ID", } ); const bounds: google.maps.LatLngBoundsLiteral = { north: -25.363882, south: -31.203405, east: 131.044922, west: 125.244141, }; // Display the area between the location southWest and northEast. map.fitBounds(bounds); // Add 5 markers to map at random locations. // For each of these markers, give them a title with their index, and when // they are clicked they should open an infowindow with text from a secret // message. const secretMessages = ["This", "is", "the", "secret", "message"]; const lngSpan = bounds.east - bounds.west; const latSpan = bounds.north - bounds.south; for (let i = 0; i < secretMessages.length; ++i) { const marker = new google.maps.marker.AdvancedMarkerElement({ position: { lat: bounds.south + latSpan * Math.random(), lng: bounds.west + lngSpan * Math.random(), }, map: map, }); attachSecretMessage(marker, secretMessages[i]); } } // Attaches an info window to a marker with the provided message. When the // marker is clicked, the info window will open with the secret message. function attachSecretMessage( marker: google.maps.marker.AdvancedMarkerElement, secretMessage: string ) { const infowindow = new google.maps.InfoWindow({ content: secretMessage, }); marker.addListener("click", () => { infowindow.open(marker.map, marker); }); } initMap();
JavaScript
async function initMap() { // Request needed libraries. const { Map } = await google.maps.importLibrary("maps"); const { AdvancedMarkerElement } = await google.maps.importLibrary("marker"); const map = new google.maps.Map(document.getElementById("map"), { zoom: 4, center: { lat: -25.363882, lng: 131.044922 }, mapId: "DEMO_MAP_ID", }); const bounds = { north: -25.363882, south: -31.203405, east: 131.044922, west: 125.244141, }; // Display the area between the location southWest and northEast. map.fitBounds(bounds); // Add 5 markers to map at random locations. // For each of these markers, give them a title with their index, and when // they are clicked they should open an infowindow with text from a secret // message. const secretMessages = ["This", "is", "the", "secret", "message"]; const lngSpan = bounds.east - bounds.west; const latSpan = bounds.north - bounds.south; for (let i = 0; i < secretMessages.length; ++i) { const marker = new google.maps.marker.AdvancedMarkerElement({ position: { lat: bounds.south + latSpan * Math.random(), lng: bounds.west + lngSpan * Math.random(), }, map: map, }); attachSecretMessage(marker, secretMessages[i]); } } // Attaches an info window to a marker with the provided message. When the // marker is clicked, the info window will open with the secret message. function attachSecretMessage(marker, secretMessage) { const infowindow = new google.maps.InfoWindow({ content: secretMessage, }); marker.addListener("click", () => { infowindow.open(marker.map, marker); }); } initMap();
सैंपल आज़माएं
इवेंट हैंडलर में प्रॉपर्टी सेट करें और पाएं
इवेंट के ट्रिगर होने पर, Maps JavaScript API इवेंट सिस्टम में कोई भी एमवीसी स्टेट बदलने वाला इवेंट पास
नहीं होता. (उपयोगकर्ता इवेंट, ऐसे आर्ग्युमेंट पास करते हैं
जिनकी जांच की जा सकती है.) अगर आपको एमवीसी स्टेट में बदलाव पर किसी प्रॉपर्टी की जांच करनी है, तो आपको उस ऑब्जेक्ट के लिए सही getProperty()
तरीके को साफ़ तौर पर कॉल करना चाहिए. इस जांच में
हमेशा एमवीसी ऑब्जेक्ट की मौजूदा स्थिति की जानकारी हासिल की जाएगी.
हो सकता है कि यह वह स्थिति न हो जब इवेंट पहली बार ट्रिगर हुआ था.
ध्यान दें: किसी इवेंट हैंडलर में साफ़ तौर पर ऐसी प्रॉपर्टी सेट करने से जो उस प्रॉपर्टी की स्थिति में बदलाव होने पर रिस्पॉन्स देती है. इस वजह से, हो सकता है कि उपयोगकर्ता के व्यवहार का अनुमान न लगाया जा सके और/या वह अनचाहा व्यवहार कर दे. उदाहरण के लिए, ऐसी प्रॉपर्टी सेट करने से कोई नया इवेंट ट्रिगर होगा. अगर आप हमेशा इस इवेंट हैंडलर में कोई प्रॉपर्टी सेट करते हैं, तो हो सकता है कि आप कभी न खत्म होने वाला लूप बना लें.
नीचे दिए गए उदाहरण में, हमने ज़ूम इवेंट का जवाब देने के लिए एक इवेंट हैंडलर सेट अप किया है. इसके लिए, उस लेवल को दिखाने वाली जानकारी विंडो को लाया गया है.
TypeScript
async function initMap() { // Request needed libraries. const { Map } = await google.maps.importLibrary("maps") as google.maps.MapsLibrary; const originalMapCenter = new google.maps.LatLng(-25.363882, 131.044922); const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 4, center: originalMapCenter, } ); const infowindow = new google.maps.InfoWindow({ content: "Change the zoom level", position: originalMapCenter, }); infowindow.open(map); map.addListener("zoom_changed", () => { infowindow.setContent("Zoom: " + map.getZoom()!); }); } initMap();
JavaScript
async function initMap() { // Request needed libraries. const { Map } = await google.maps.importLibrary("maps"); const originalMapCenter = new google.maps.LatLng(-25.363882, 131.044922); const map = new google.maps.Map(document.getElementById("map"), { zoom: 4, center: originalMapCenter, }); const infowindow = new google.maps.InfoWindow({ content: "Change the zoom level", position: originalMapCenter, }); infowindow.open(map); map.addListener("zoom_changed", () => { infowindow.setContent("Zoom: " + map.getZoom()); }); } initMap();
सैंपल आज़माएं
डीओएम इवेंट सुनें
Maps JavaScript API इवेंट मॉडल अपने कस्टम इवेंट बनाता है और उन्हें मैनेज करता है. हालांकि, ब्राउज़र में मौजूद डीओएम (डॉक्यूमेंट ऑब्जेक्ट मॉडल)
इस्तेमाल किए जा रहे किसी खास इवेंट मॉडल के हिसाब से, अपने इवेंट भी बनाता और भेजता है. अगर आपको इन इवेंट को कैप्चर करके इनका जवाब देना है, तो Maps JavaScript API, डीओएम इवेंट को सुनने और उनसे बाइंड करने के लिए addDomListener()
स्टैटिक तरीका उपलब्ध कराता है.
इस सुविधा विधि में हस्ताक्षर है, जैसा कि नीचे दिखाया गया है:
addDomListener(instance:Object, eventName:string, handler:Function)
जहां instance
, ब्राउज़र पर काम करने वाला कोई भी DOM एलिमेंट हो सकता है.
इसमें ये शामिल हैं:
- डीओएम के हैरारकी वाले सदस्य, जैसे कि
window
याdocument.body.myform
- नाम वाले एलिमेंट, जैसे कि
document.getElementById("foo")
ध्यान दें कि addDomListener()
बताए गए इवेंट को ब्राउज़र में पास करता है, जो उसे ब्राउज़र के डीओएम इवेंट मॉडल के मुताबिक हैंडल करता है. हालांकि, करीब-करीब सभी मॉडर्न ब्राउज़र कम से कम DOM लेवल 2 के साथ काम करते हैं. (DOM लेवल इवेंट के बारे में ज़्यादा जानकारी के लिए, Mozilla DOM Levels
संदर्भ देखें.)
TypeScript
async function initMap() { // Request needed libraries. const { Map } = await google.maps.importLibrary("maps") as google.maps.MapsLibrary; const mapDiv = document.getElementById("map") as HTMLElement; const map = new google.maps.Map(mapDiv, { zoom: 8, center: new google.maps.LatLng(-34.397, 150.644), }); // We add a DOM event here to show an alert if the DIV containing the // map is clicked. google.maps.event.addDomListener(mapDiv, "click", () => { window.alert("Map was clicked!"); }); } initMap();
JavaScript
async function initMap() { // Request needed libraries. const { Map } = await google.maps.importLibrary("maps"); const mapDiv = document.getElementById("map"); const map = new google.maps.Map(mapDiv, { zoom: 8, center: new google.maps.LatLng(-34.397, 150.644), }); // We add a DOM event here to show an alert if the DIV containing the // map is clicked. google.maps.event.addDomListener(mapDiv, "click", () => { window.alert("Map was clicked!"); }); } initMap();
एचटीएमएल
<html> <head> <title>Listening to DOM Events</title> <link rel="stylesheet" type="text/css" href="./style.css" /> <script type="module" src="./index.js"></script> </head> <body> <div id="map"></div> <!-- prettier-ignore --> <script>(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))}) ({key: "AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg", v: "weekly"});</script> </body> </html>
सैंपल आज़माएं
ऊपर दिया गया कोड, Maps JavaScript API कोड है. हालांकि,
addDomListener()
वाला तरीका, ब्राउज़र के window
ऑब्जेक्ट से जुड़ा होता है. साथ ही, यह एपीआई को
एपीआई के सामान्य डोमेन से बाहर मौजूद ऑब्जेक्ट से संपर्क करने की अनुमति देता है.
इवेंट लिसनर हटाएं
किसी खास इवेंट लिसनर को हटाने के लिए, उसे किसी
वैरिएबल को असाइन किया जाना ज़रूरी है. इसके बाद, removeListener()
को कॉल किया जा सकता है.
यह उस वैरिएबल का नाम होता है जिसे लिसनर असाइन किया गया था.
var listener1 = marker.addListener('click', aFunction); google.maps.event.removeListener(listener1);
किसी खास इंस्टेंस से सभी लिसनर हटाने के लिए, इंस्टेंस का नाम पास करके
clearInstanceListeners()
को कॉल करें.
var listener1 = marker.addListener('click', aFunction); var listener2 = marker.addListener('mouseover', bFunction); // Remove listener1 and listener2 from marker instance. google.maps.event.clearInstanceListeners(marker);
किसी खास इवेंट टाइप के सभी लिसनर को हटाने के लिए,
clearListeners()
को कॉल करें. इसके बाद, इंस्टेंस का नाम और
इवेंट का नाम पास करें.
marker.addListener('click', aFunction); marker.addListener('click', bFunction); marker.addListener('click', cFunction); // Remove all click listeners from marker instance. google.maps.event.clearListeners(marker, 'click');
ज़्यादा जानकारी के लिए, google.maps.event नेमस्पेस के लिए रेफ़रंस दस्तावेज़ देखें.
प्रमाणीकरण गड़बड़ियों के लिए सुनें
अगर आपको प्रोग्राम के हिसाब से पुष्टि न हो पाने का पता लगाना है (उदाहरण के लिए, अपने-आप बीकन भेजना), तो आप कॉलबैक फ़ंक्शन तैयार कर सकते हैं.
अगर नीचे दिया गया ग्लोबल फ़ंक्शन तय किया गया है, तो पुष्टि नहीं होने पर इसे कॉल किया जाएगा.
function gm_authFailure() { /* Code */ };