当前位置: 代码迷 >> 跨浏览器开发 >> 一个天气脚本遇到兼容性有关问题
  详细解决方案

一个天气脚本遇到兼容性有关问题

热度:7208   发布时间:2013-02-26 00:00:00.0
求教:一个天气脚本遇到兼容性问题
自己写了一个根据本级IP获得当前天气信息的JS,在IE中正常,但在其他浏览器中不能运行,有知道原因的前辈指点一下,拜谢!!
PS:顺便希望各位路过的朋友,帮着测试一下获得的天气信息是不是当地的,O(∩_∩)O~感激!
HTML code
<!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>


------解决方案--------------------------------------------------------
用jquery插件全部浏览器基本兼容,你实例化xmlhttp这个时候,没有判断浏览器,应该是这里出现问题了。
------解决方案--------------------------------------------------------
在建立xmlhttp时,兼容性写法有问题。
下面是一个例子
HTML code
   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);}
  相关解决方案