移植问题 - Internet Explorer到其他所有

时间:2012-02-18 18:38:18

标签: javascript

我有一些代码是在Windows 7计算机上开发的,可以运行任何Windows 7竞争对手而不会出现任何问题。我尝试在我的Mac上运行它,程序只停留在加载页面上。

程序显示bing maps视图并加载一些内容以获取特定卫星的位置。现在所有的数学和东西都有效,但我认为问题出在这里:

function getOrbitalElements()
{
TLE_Line1="";
TLE_Line2="";
pgTXT = "";
xmlhttp = null;
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
if (xmlhttp!=null)
{
    xmlhttp.onreadystatechange = stateChange;
    xmlhttp.open("GET",url,true);
    xmlhttp.send(null);
}

}

那么有什么方法可以将其更改为在任何浏览器上运行?谢谢 附:如果您需要查看整个代码,我会添加它

3 个答案:

答案 0 :(得分:5)

Mac上没有ActiveX对象。以下行不起作用:

xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

您可以使用XMLHttpRequest

var xmlhttp = null;  
if (window.XMLHttpRequest) { // Mozilla, Safari, ...  
    xmlhttp = new XMLHttpRequest();  
} else if (window.ActiveXObject) { // IE 8 and older  
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");  
}  

if (xmlhttp != null) {
    ...
}

但如果您正在寻求最佳的跨浏览器支持,我建议您使用jQuery之类的javascript框架来执行您的AJAX请求。

答案 1 :(得分:1)

替换

xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

xmlhttp = window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();

修改

正如其他人所说,你可能会发现使用像jQuery这样的东西很有好处(这是非常好的),但你可能不需要花费精力来调整你现有的代码。如果您已经编写好(标准)javascript,您会发现浏览器的交叉兼容性问题应该是最小的。

将来,请务必尽早在其他浏览器中进行测试,以避免出现此类问题。

答案 2 :(得分:0)

将特定Web应用程序从浏览器特定版本移植到与浏览器无关的版本的最佳方法是使用jQuery等javascript框架。它旨在将不同浏览器之间出现的粗糙边缘平滑到友好+统一的API中。例如,上面的代码可以通过jQuery ajax请求在多个浏览器中完成

$.ajax({
  url: url,
  success: function ()  {
    // Called when the query completes
    statechange();
  }});