0

如果我去this Google Maps page,某些HTML缺少查看源文件,但在Firebug中顯示。GM_xmlhttpRequest的responsetext缺少一些HTML

同樣,當同一個URL被傳遞給我的函數時,下面的HTML不會顯示在responseText中,但是當我打開頁面時它會在Firebug中顯示。

<a id="mapmaker-link" class="kd-button mini left" style="" href="https://www.google.com/mapmaker?ll=41.06877,-112.047203&spn=0.038696,0.132093&t=h&z=14&vpsrc=0&q=1093+W+3090+S,Syracuse,+UT&utm_medium=website&utm_campaign=relatedproducts_maps&utm_source=mapseditbutton_normal"> 

這裏是我使用的功能:

function updateMap(url) { 
    GM_xmlhttpRequest(
    { 
     method: 'GET', 
     url: url, 
     onload: function(resp) { 
      var ll = resp.responseText.split("mapmaker?")[1]; 
      ll  = ll.split("&")[0]; 
      document.getElementById('googlemap').href = url+"&"+ll; 
     } 
    }); 
} 


我已經放置在pastebin.com/Tt8nrzG8樣品responseText值。

+0

你可以發佈'resp.responseText'的內容嗎? – plalx 2013-04-09 22:46:24

+0

https://maps.google.com/?q=1093+W+3090+S,Syracuse,+UT – 2013-04-10 00:57:37

回答

2

響應是「缺少」HTML,因爲被調用的頁面通過AJAX加載該HTML(以及幾乎所有的頁面內容)。
GM_xmlhttpRequest(以及所有其他當前的AJAX方法)只能獲取給定頁面的靜態源。這樣的XHR請求無法處理請求的頁面的JavaScript,就像瀏覽器訪問頁面時瀏覽器所做的那樣。

事實上,如果您將that sample responseText, that you linked,另存爲HTML文件,你會看到它看起來是這樣的:

The OP's sample response


"How to get an AJAX get-request to wait for the page to be rendered before returning a response?",對於同一類型的問題。但請注意,答案建議您使用API(如果有)。

因此,使用the Google Maps API來獲取您想要的網址的經緯度。

或者,最簡單的方法仍然是有腳本還對谷歌地圖的頁面上運行,並做鏈接一次性變焦與你的特殊的URL參數 - 就像我在your previous question建議。這還有一個額外的好處,就是在你決定點擊你的Google地圖鏈接之前,不需要撥打Google電話。

如果齊齊的iframe辦法(再次,建議不要使用谷歌的網站),當心,你將需要adjust the URL to tell Google to allow iframing和緯度/經度信息會在頁面的不同部分。

+0

好的,環視四周,最後看到下面的鏈接,獲取一個JSON字符串,其中包含我的Lat和Lng https:/ /maps.googleapis.com/maps/api/geocode/json?sensor=true&address= – 2013-04-10 19:53:51