使用PhantomJS调用Google Map Geocode

时间:2014-03-28 21:10:58

标签: javascript google-maps phantomjs

我想用phantomjs编写一个地理编码函数{input:address} - > {输出:laglat}

然而,在我包含google api并编写以下代码后,它会出错并说:“ReferenceError:找不到变量:google”

var page = new WebPage()
page.includeJs("http://maps.googleapis.com/maps/api/js?key={MY_KEY}&sensor=false", function() {
  var geocoder;
  geocoder = new google.maps.Geocoder();
  var address = "507 W Florida Street, Chicago, Illinois"; // not real here
  geocoder.geocode( { 'address': address}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
      console.log(results[0].geometry.location);
    } else {
      console.log("error");
    }
  });
});

这是来自控制台的错误:

ReferenceError: Can't find variable: google

geocode.js:4
:/modules/webpage.js:337

我是PhantomJS的新手,有人能给我一些关于如何修改我的代码的提示吗?我真的很感激。

1 个答案:

答案 0 :(得分:4)

includeJs的第二个参数是在加载脚本后的回调。 但是这个回调仍然在PhantomJS执行上下文中,这不是你页面的上下文。 您需要致电page.evaluate。所以,你的代码将是:

var page = new WebPage()
page.includeJs("http://maps.googleapis.com/maps/api/js?key={MY_KEY}&sensor=false", function() {
  // we're still in the main execution context
  page.evaluate(function() {
  // now we're in the context of a web page.
      var geocoder;
      geocoder = new google.maps.Geocoder();
      var address = "507 W Florida Street, Chicago, Illinois"; // not real here
      geocoder.geocode( { 'address': address}, function(results, status) {
         if (status == google.maps.GeocoderStatus.OK) {
             console.log(results[0].geometry.location);
         } else {
             console.log("error");
         }
      });
   });
});