求教:一个天气脚本遇到兼容性问题
自己写了一个根据本级IP获得当前天气信息的JS,在IE中正常,但在其他浏览器中不能运行,有知道原因的前辈指点一下,拜谢!!
PS:顺便希望各位路过的朋友,帮着测试一下获得的天气信息是不是当地的,O(∩_∩)O~感激!
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML> <HEAD> <TITLE>IP_Weather</TITLE> <script type="text/javascript" src="http://j.maxmind.com/app/geoip.js"></script> <SCRIPT type="text/javascript"> //用于在页面判断天气信息是否准备好 var weather={"onReady":false}; function IpWeather() { //AJAX获取XMLHttpRequest var xmlhttp=false; /* Create a new XMLHttpRequest object to talk to the Web server */ /*@cc_on @*/ /*@if (@_jscript_version >= 5) try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e2) { xmlhttp = false; } } @end @*/ if (!xmlhttp && typeof XMLHttpRequest != 'undefined') { xmlhttp = new XMLHttpRequest(); } //通过maxmind提供的脚本根据IP通过geoip_city()获得所在城市名,然后利用Google的API获得天气信息 xmlhttp.open('GET', 'http://www.google.com/ig/api?weather='+geoip_city()+'&hl=zh-cn', true); xmlhttp.send(""); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4) { //拿到返回的XML格式的天气信息 var weatherXML = xmlhttp.responseXML; //解析数据 var now = weatherXML.getElementsByTagName("current_conditions")[0]; var now_t = now.getElementsByTagName('temp_c')[0].getAttribute('data'); var now_w = now.getElementsByTagName('wind_condition')[0].getAttribute('data'); var now_c = now.getElementsByTagName('condition')[0].getAttribute('data'); var now_h = now.getElementsByTagName('humidity')[0].getAttribute('data'); var today = weatherXML.getElementsByTagName("forecast_conditions")[0]; var t_max = today.getElementsByTagName('high')[0].getAttribute('data'); var t_min = today.getElementsByTagName('low')[0].getAttribute('data'); //数据封装到JSON中,并将onReady改为True weather={"t_now":now_t,"wind":now_w,"cloud":now_c,"humidity":now_h,"t_max":t_max,"t_min":t_min,"onReady":true}; } } } //调用 IpWeather();</SCRIPT></HEAD><BODY><div id='target'></div> </BODY><script type="text/javascript"> function weatherInfo() { if(weather.onReady) { document.getElementById('target').innerHTML="天气状况:"+weather.cloud+" 当前温度:"+weather.t_now+"℃ 全天温度:"+weather.t_min+"--"+weather.t_max+"℃ "+weather.humidity+" "+weather.wind; } else { document.getElementById('target').innerHTML="数据读取中。。。"; setTimeout("weatherInfo()",100); } } weatherInfo();</script></HTML>
if (window.XMLHttpRequest) { //针对FireFox,Mozillar,Opera,Safari,IE7,IE8 xmlhttp = new XMLHttpRequest(); //针对某些特定版本的mozillar浏览器的BUG进行修正 if (xmlhttp.overrideMimeType) { xmlhttp.overrideMimeType("text/xml"); } } else if (window.ActiveXObject) { //针对IE6,IE5.5,IE5 //两个可以用于创建XMLHTTPRequest对象的控件名称,保存在一个js的数组中 //排在前面的版本较新 var activexName = ["MSXML2.XMLHTTP","Microsoft.XMLHTTP"]; for (var i = 0; i < activexName.length; i++) { try{ //取出一个控件名进行创建,如果创建成功就终止循环 //如果创建失败,回抛出异常,然后可以继续循环,继续尝试创建 xmlhttp = new ActiveXObject(activexName[i]); break; } catch(e){ } } } //确认XMLHTtpRequest对象创建成功 if (!xmlhttp) { alert("XMLHttpRequest对象创建失败!!"); return; } else { alert(xmlhttp);}
[解决办法]
XHR构建兼容性问题
去这里看吧
BX9041: 各浏览器创建 XMLHttpRequest 对象的方式不同
[解决办法]
不错,收藏参考!
[解决办法]
应该是跨域的问题! 用iframe 试试
[解决办法]