我想用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的新手,有人能给我一些关于如何修改我的代码的提示吗?我真的很感激。
答案 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");
}
});
});
});