2009-07-26 15 views
5

मैं Google मानचित्र पर ओवरले आकारों के लिए केएमएल का उपयोग कर रहा हूं। प्रत्येक आकार से संबंधित जानकारी <description> तत्व में शामिल है, साथ ही उस आकार के अनुरूप विवरण पृष्ठ के लिंक के साथ।एम्बेडेड Google मानचित्र में केएमएल पॉपअप में लक्ष्य = _blank को ओवरराइड कैसे करें?

<description> 
    <![CDATA[ 
    <div> 

    ... 

     <p> 
      <a href="Concession.20.aspx">View details</a> 
     </p> 
     &nbsp; 
    </div> 
]]> 

बेशक

, मैं, एक ही विंडो में खोलने के लिए उस लिंक के लिए चाहते हैं के बाद से यह सिर्फ इस एक ही पर अन्य पृष्ठ पर नेविगेट है:

उदाहरण के लिए, मेरी एम एल यह भी शामिल है साइट। दुर्भाग्यवश, as documented here, केएमएल फ़ाइल के <description> तत्व में एम्बेडेड लिंक target='_blank' के साथ पुनः लिखे गए हैं।

एचटीएमएल में सीधे शामिल किए गए एचटीएमएल में लक्षित किए जाने पर लक्ष्य को अनदेखा किया जाता है; ऐसे सभी लिंक खोले गए हैं जैसे कि लक्ष्य _blank पर सेट है। कोई भी निर्दिष्ट लक्ष्य अनदेखा कर रहे हैं।

मेरा प्रश्न: क्या कोई इस कामकाज के बारे में सोच सकता है जो इस (अप्रिय, आईएमएचओ) व्यवहार को ओवरराइड करेगा और इन लिंक को एक ही विंडो में खोलने के लिए मजबूर करेगा?

एक दृष्टिकोण के उदाहरण के रूप में, मैं वर्तमान में इन लिंक (jQuery का उपयोग करके) पर क्लिक ईवेंट को ओवरराइड करने का प्रयास कर रहा हूं, लेकिन वे Google मानचित्र द्वारा गतिशील रूप से जेनरेट किए गए हैं और मुझे लगता है कि उन्हें पकड़ नहीं लिया जा सकता है काफी पहले।

उत्तर

3

मैं jQuery और मानचित्र के infowindowopen ईवेंट का उपयोग कर एक समाधान समाधान के साथ आया हूं। इस नक्शे के लिए प्रवर्तन कोड में है:

map = new google.maps.Map2(document.getElementById("map")); 

    ... 

    GEvent.addListener(map, "infowindowopen", function() { 
     // Get a reference to the infoWindow 
     var infoWindow = $(this.getInfoWindow().getContentContainers()); 
     // Find all <a> tags in the infoWindow and reset their target attribute 
     $("a", infoWindow).attr("target", "_self"); 
    }); 
+0

धन्यवाद, मैं इसे स्वयं समझने के लिए पूरी सुबह कोशिश कर रहा था। मैं वास्तव में jquery.jmap.js का उपयोग कर रहा हूं और मुझे लगता है कि यह ऐडफिड विधि के विकल्प के रूप में उपयोगी होगा। मैं समझता हूं कि यह इस तरह से क्यों व्यवहार करता है, लेकिन इसके लिए एक साधारण ध्वज अच्छा होगा। – ironfroggy

+0

ऐसा लगता है कि यह अब और काम नहीं करता है ... मैं लिंक के लक्ष्य को बदलने में कामयाब रहा (और इसे क्रोम इंस्पेक्टर में देखा) लेकिन जब क्लिक किया गया, तो पेज नई विंडो में खुल गया और लक्ष्य बदलकर '_blank' दोबारा = ( –

1

आदेश उन क्लिक ईवेंट को पाने के लिए, आप यह भी jQuery लाइव ईवेंट का उपयोग कर सकते हैं: (ध्यान दें कि गूगल मानचित्र पॉपअप आईडी के साथ एक div में हैं 'iw' या आईडी 'iw_kml')

$('#iw a').live('click', function() { 
    $(this)... (Gives you the clicked a-object) 

}); 

Live events भविष्य की सभी मिलान तत्वों को शामिल करेगा।

0

मैं एक और अधिक सरल समाधान मिल गया है, बस लिंक को एक onclick व्यवहार जोड़ें:

onclick='return false;' 

अपने लिंक स्वचालित रूप से target = "_ स्व" लिए बदल जाएगा।

लेकिन आप अन्य लक्ष्य को बदलने के लिए, या pheraps विशेषता आप एक श्रोता और एक जावास्क्रिप्ट जोड़ना चाहिए हटाने इस तरह की जगह चाहते हैं:

GEvent.addListener(map,"infowindowprepareopen", function(iwtabs) { 
    iwtabs[0].contentElem.innerHTML = iwtabs[0].contentElem.innerHTML.replace("_blank", "_parent"); 
    }); 

इस का उपयोग करने के लिए आप को किसी लाइटबॉक्स है जब बहुत उपयोगी है (या समान) infowindow बॉक्स के अंदर लिंक।

चियर्स

1

मैं गूगल मानचित्र एपीआई V3 में कई समाधान की कोशिश की है, लेकिन ठीक से काम करने उनमें से किसी एक नहीं कर सके। यहां मेरा नवीनतम प्रयास है जो काम करता है:

google.maps.event.addListener(mapKmlLayer, 'click', function(kmlEvent) { 
    kmlEvent.featureData.description = kmlEvent.featureData.description.gsub("_blank", "_self"); 
}); 
2

यह मेरे लिए यह काम है।

<script type="text/javascript" src="jquery-1.4.2.min.js"></script> 
<script type="text/javascript"> 
function initialize() { 
    var myLatlng = new google.maps.LatLng(49.8,15.8); 
    var myOptions = { 
    zoom: 7, 
    center: myLatlng, 
    mapTypeId: google.maps.MapTypeId.ROADMAP, 
    mapTypeControl: false 
    } 
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

    var ctaLayer = new google.maps.KmlLayer('http://zonglovani.info/mapa/mapa-cz.kml'); 
    ctaLayer.setMap(map); 

    google.maps.event.addListener(ctaLayer, 'click', function(kmlEvent) { 
    kmlEvent.featureData.description = kmlEvent.featureData.description.replace(/ target="_blank"/ig, ""); 
    }); 
} 

function loadScript() { 
    var script = document.createElement("script"); 
    script.type = "text/javascript"; 
    script.src = "http://maps.google.com/maps/api/js?sensor=false&callback=initialize"; 
    document.body.appendChild(script); 
}); 

window.onload = loadScript; 
</script> 
6

मैं उन उदाहरणों को काम करने के लिए नहीं मिला। अंत में मैंने इसे jQuery में किया जो लिंक पर खुलता है जैसे ही इसे क्लिक किया जाता है।

$('#map_canvas').delegate('a', 'click', function(event) { 
    window.location.href=$(this).attr('href'); 
    return false; 
    }); 
+0

आपको बहुत बहुत धन्यवाद! मैं OpenStreetMap में एक लिंक में आरईएल विशेषता जोड़ने की कोशिश कर रहा हूं, इसलिए मैं jQuery टूल्स ओवरले का उपयोग कर सकता हूं। इससे मुझे 9 0% मिल जाता है। – Jason

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