首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > 跨浏览器开发 >

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

2012-02-24 
求教:一个天气脚本遇到兼容性问题自己写了一个根据本级IP获得当前天气信息的JS,在IE中正常,但在其他浏览器

求教:一个天气脚本遇到兼容性问题
自己写了一个根据本级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);} 


[解决办法]
XHR构建兼容性问题
去这里看吧
BX9041: 各浏览器创建 XMLHttpRequest 对象的方式不同
[解决办法]
不错,收藏参考!
[解决办法]
应该是跨域的问题! 用iframe 试试
[解决办法]

探讨

应该是跨域的问题! 用iframe 试试

[解决办法]
学习了,呵呵,楼主,用了4楼的,还有问题吗
[解决办法]
探讨

引用:

应该是跨域的问题! 用iframe 试试


iframe 也有跨域问题的。。。。

[解决办法]
例如,中国天气网,提供有天气插件,可以自动根据ip判断地区,显示当地天气。
http://service.weather.com.cn/plugin/index.shtml
不过好像不大准。

各个地方的ip判断都会有不准的时候,
QQ算是相对比较准的了,
这个页面整了个可校正版的。
www.wagang.net。

[解决办法]
判断xmlhttp是否成功再请求。可以看下jquery这些是怎么创建的。

热点排行