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