2014-05-09 2 views
1

가상 요소에서 작동하는 Google지도를 만들면 언제든지 어느 페이지 에든 붙여 넣을 수 있습니다.가상 요소에서 Google지도를 만들 수 있습니까?

내 JS가 페이지에 이미 존재하는 요소를 타겟팅 할 때 여기 있습니다. 내가 원하는 무엇

var mapLatLong = new google.maps.LatLng(51.5174456, -0.1305081); 
var markerLatlng = new google.maps.LatLng(51.5170951, -0.1367416); 

var mapOptions = { 
    zoom: 16, 
    center: mapLatLong, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
} 

var map = new google.maps.Map($('#map_canvas'), mapOptions); 

var contentString = '<div id="content">'+ 
         '<div id="siteNotice">'+ 
         '</div>'+ 
         '<h1 id="firstHeading" class="firstHeading">BrocklebankPenn</h1>'+ 
         '<div id="bodyContent">'+ 
          '<p>5th floor, 58-60 Berners Street,<br />London,<br />W1T 3NQ,<br />United Kingdom</p>'+ 
          '<p>+44 (0)20 3137 7034</p>'+ 
         '</div>'+ 
        '</div>'; 

var infowindow = new google.maps.InfoWindow({ 
    content: contentString 
}); 

var marker = new google.maps.Marker({ 
    position: markerLatlng, 
    map: map, 
    title: 'BrocklebankPenn' 
}); 

google.maps.event.addListener(marker, 'click', function() { 
    infowindow.open(map,marker); 
}); 

infowindow.open(map,marker); 

이 같은 것입니다 : 기본적으로

this.mapCanvas = document.createElement('div'); 
this.mapCanvas.setAttribute('id', 'map_canvas'); 

var mapLatLong = new google.maps.LatLng(51.5174456, -0.1305081); 
var markerLatlng = new google.maps.LatLng(51.5170951, -0.1367416); 

var mapOptions = { 
    zoom: 16, 
    center: mapLatLong, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
} 

var map = new google.maps.Map($(this.mapCanvas), mapOptions); 

var contentString = '<div id="content">'+ 
         '<div id="siteNotice">'+ 
         '</div>'+ 
         '<h1 id="firstHeading" class="firstHeading">BrocklebankPenn</h1>'+ 
         '<div id="bodyContent">'+ 
          '<p>5th floor, 58-60 Berners Street,<br />London,<br />W1T 3NQ,<br />United Kingdom</p>'+ 
          '<p>+44 (0)20 3137 7034</p>'+ 
         '</div>'+ 
        '</div>'; 

var infowindow = new google.maps.InfoWindow({ 
    content: contentString 
}); 

var marker = new google.maps.Marker({ 
    position: markerLatlng, 
    map: map, 
    title: 'BrocklebankPenn' 
}); 

google.maps.event.addListener(marker, 'click', function() { 
    infowindow.open(map,marker); 
}); 

infowindow.open(map,marker); 

this.$el.html(this.mapCanvas); 

똑같은 대신 #map_canvasvariable으로, 나는 과거에 JS으로이 방법을 촬영했지만 그것은 않습니다 Google지도에서 작동하지 않는 것 같습니다. 다음 오류가 발생합니다.

Uncaught TypeError: Cannot set property 'position' of undefined 

나는 잘 모릅니다.

누군가가 도움이된다면 도움이 될 것입니다.

건배, 루크.

+0

제 생각에는 문제는 페이지에 삽입하기 전에 Google지도 JS에서 'map_canvas'div를 사용하려고하는 것입니다. 나는'var. mapLatLong'에서 다른 것들을 감싸는 initialize 함수를 호출하기 전에'this. $ el.html (this.mapCanvas);'라고 말하고 싶습니다. – duncan

+0

그래, 그게 내가하려는거야, 내가 설정하고 싶어. DOM에 삽입하기 전에지도를 올리십시오. 그러나 나는 그것이 가능하지 않다는 느낌을 받고 있습니다. – lukehillonline

+1

그래, 그렇게 생각하지 않아. 처음부터 DOM에 정상 div가 존재하지만 처음에는 숨겨진 다음지도를 만든 후에 표시하는 것은 어떻습니까? – duncan

답변

2

는 기본적으로이 가능, 데모 : 코드와 http://jsfiddle.net/doktormolle/5SjnK/

이슈 :

var map = new google.maps.Map($(this.mapCanvas), mapOptions); 

$(this.mapCanvas)는 jQuery를 객체이지만,가 될 것으로 예상의 HTML 요소

this.$el.html(this.mapCanvas); 

html을 설정하지 마십시오. 원래 노드를 문서에 삽입해야합니다.

그러나 나는 그것을 제안하지 않을 것이다. 더 많은 이슈가있을 것이다. map-div의 parentNode에 접근하려는 API 메소드 나 문서 내의 위치를 ​​계산해야하는 메소드를 사용할 때 (노드가 문서에 삽입되기 전에 모두 실패 할 것이다).

관련에 는 모든 페이지에 붙여 넣을 : 그것은 불가능

, 당신이지도를 사용하는 문서가 당신이 API를로드 같은 문서해야합니다, API는 내부적으로/윈도우에 대한 참조를 사용합니다 API가로드 된 문서 Marker drag not working in iframe under Chrome and Firefox

그러나 한 모든 페이지는 "모든 문서"를 의미하지 않는 것이 가능하다 (당신의 묘사는 항상 같은 문서의에 대한) :이 질문을 참조하십시오.

+0

좋은 솔루션 덕분에! 아, 그리고 귀하의 질문에 대답하기 위해, 그것은 모두 1 문서이며 각 페이지는 동일한 문서에로드됩니다. – lukehillonline

관련 문제