javascript - 将天气小部件嵌入到 Google map 的信息窗口中

标签 javascript html google-maps widget infowindow

我正在尝试嵌入 http://www.weather.com/services/oap/weather-widgets.html 中的天气小部件进入 Google map 的信息窗口,这样当我单击标记时,天气小部件就会在信息窗口中打开。

嵌入天气小部件的代码如下(针对加利福尼亚州旧金山):

当我将其放入 HTML 中时,它工作正常:

<html>
<head>
</head>
<body>

<div style="width:270px;height:175px;border:1px solid blue;padding:10px">
<script type="text/javascript" src="http://voap.weather.com/weather/oap/USCA0987?template=GENXH&par=3000000007&unit=0&key=twciweatherwidget"></script>
</div>

</body>
</html>

但是,当我尝试在以下代码中使用它时,本应在 Google map 上的 InfoWindow 中显示小部件,但它不起作用:

<html><head>
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
<script type="text/javascript">
function initialize() {
var cpoint = new google.maps.LatLng(37.770728 ,-122.458199 );
var mapOptions = {
zoom: 4,
center: cpoint,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
var infowindow = new google.maps.InfoWindow();

var info1 = '<div style="width:270px;height:175px;border:1px solid blue;padding:10px"><script type="text/javascript" src="http://voap.weather.com/weather/oap/USCA0987?template=GENXH&par=3000000007&unit=0&key=twciweatherwidget"></script></div>';

var point1 = new google.maps.LatLng(37.770728 ,-122.458199 );
var marker1 = new google.maps.Marker({
position: point1 ,
map: map,
title: "Click here for details"
});
google.maps.event.addListener(marker1 , "click", function() {
infowindow.setContent(info1 );
infowindow.open(map,marker1 );
});
}google.maps.event.addDomListener(window, "load", initialize);
</script>
</head><body>
<div id="map-canvas" style="width:750px; height:450px; border: 2px solid #3872ac;"></div>
</body></html>

我所做的就是将该 div 放入 info1 Javascript 变量中。我不确定我是否做错了什么,或者InfoWindow不允许这样做。

最佳答案

我终于能够使用 iframe 标签解决这个问题。请参阅我的博文Weather forecasting with SAS-generated Google maps

首先,我创建了天气迷你页面:

%macro create_widgets;

  %let dsid = %sysfunc(open(places));
  %let num  = %sysfunc(attrn(&dsid,nlobs));
  %let rc   = %sysfunc(close(&dsid));

  %do j=1 %to &num;

    data _null_;
      p = &j;
      set places point=p;
      file "&proj_path\widgets\accuweather_com_widget&j..html";
      put
        '<html><body>' /
        '<a href="http://www.accuweather.com/en/' loc +(-1) '/' loczip +(-1) '/current-weather/' lockey +(-1) '" class="aw-widget-legal"></a>' /
        '<div id="' dataid +(-1) '" class="aw-widget-current" data-locationkey="' lockey +(-1) '" data-unit="f" data-language="en-us" data-useip="false" data-uid="' dataid +(-1) '" data-editlocation="false"></div>' /
        '<script type="text/javascript" src="http://oap.accuweather.com/launch.js"></script>' /
        '</body></html>'
      ;
      stop;
    run;

  %end;

%mend create_widgets;
%create_widgets;

然后我为 Google map 定义了一个信息窗口和一个自定义标记:

put
   'var info' i '= ''<iframe style="width:400px;height:360px;" src="widgets/accuweather_com_widget' i +(-1) '.html">'';' /
   'var point' i '= new google.maps.LatLng(' lat ',' lng ');' /
   'var marker' i '= new google.maps.Marker({' /
      'position: point' i ',' /
      'icon: ''images/weather-icon.gif'',' /
      'map: map,' /
      'title: "Click here for weather details"' /
   '});' /
   . . . 

其余代码与所有其他 Google Map with SAS 没有什么不同系列。

关于javascript - 将天气小部件嵌入到 Google map 的信息窗口中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25878179/

相关文章:

android - 如何获取折线点击的具体数据?

java - Android 中 GoogleMaps V2 的 GPS LocationListener

javascript - SVG 鼠标事件在 Firefox4 中有效,但在 IE8 中无效

javascript - 动态生成自定义类

javascript - 代码没有执行,可能有语法问题,或者我可能完全错了

php - 在同一页面上将用户输入显示为评论

javascript - jQuery 文件上传插件成功回调

jquery - 如何使用 jQuery for iframe 捕获点击事件?

javascript - 如何正确清除KML图层信息窗口?

Javascript 闭包和作用域问题