javascript适用于除IE以外的所有浏览器

javascript适用于除IE以外的所有浏览器,javascript,html,internet-explorer,sorttable.js,Javascript,Html,Internet Explorer,Sorttable.js,我有一些网页加载外部JavaScript文件,如下所示: <script src="sorttable.js"></script> <script type="text/javascript"> window.onload = function() { sorttable.innerSortFunction.apply(document.getElementById("Symbol-2"), []); } </script> 这是一个内部网站,

我有一些网页加载外部JavaScript文件,如下所示:

<script src="sorttable.js"></script>
<script type="text/javascript">
window.onload = function() { sorttable.innerSortFunction.apply(document.getElementById("Symbol-2"), []); }
</script>
这是一个内部网站,9.0.2是我公司部署的版本,我无法升级到新版本


我可以在IE和其他浏览器上使用它吗

您很可能需要正确设置doctype。如果您使用的是
,请尝试添加

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">


到您的

另外,确保doctype之前没有发生任何事件。包括空格和换行符。检查html的输出,而不是服务器端代码的源代码


否则,请返回到不同的doctype并重新测试其他浏览器。

这是IE的一个安全问题,尽管这可能会解决它:

   <script type="text/javascript">
       sorttable.innerSortFunction.apply(document.getElementById("Symbol-2"), []);
   </script>

sorttable.innerSortFunction.apply(document.getElementById(“Symbol-2”),[]);

脚本已经是同步的,但如果不起作用,请尝试将脚本移动到body标记之后,看起来可排序库正在使用某种黑客浏览器检测,以尝试尽早初始化库:

(摘自库源代码)

但是您正在用自己的处理程序覆盖
onload
处理程序,因此它永远不会执行

我认为最简单的解决方案就是修改
onload
处理程序来执行初始化:

window.onload = sorttable.init;
window.onload = function() { 
    sorttable.init();
    sorttable.innerSortFunction.apply(document.getElementById("Symbol-2"), []); 
};

你应该准备好了。
init()
方法有一个内部检查,以防止它执行两次初始化,因此,如果已经调用了它,则无需担心调用时出现问题。

欢迎使用Internet Explorer,伙计,也许你在IE上的实际安全级别没有启用javascript。@DadyFuji-我怎么知道它是否启用了呢?谢谢。我验证了javascript是否已启用。我非常怀疑使用
onload
处理程序是导致此问题的原因。实际上,我不得不收回这一点。这是使用
onload
处理程序的结果,但这是因为库实现者的设计很差。当我添加对sorttable.init()的调用时,它会失败,并出现“SCRIPT5007:无法获取属性'innerSortFunction'的值:对象为null或未定义”-这是因为只有当存在任何具有sortable类的表并且运行时DOM元素似乎不存在时,sorttable对象的函数innerSortFunction才会出现。但是如果没有sorttable.init(),它们确实存在(但是我得到了另一个错误)。这可能是一个愚蠢的问题,但是您是否在
onload
处理程序内部或其外部添加了对
sorttable.init()
的调用?在onload处理程序内部,就像上面显示的那样。我已经用它做了更多的测试,我发现,如果我手动重新加载页面,这一切都能正常工作。但我有一个重载函数:setTimeout(“parent.frames['header\u frame'].document.submitform.submit()”,60*1000);当刷新页面时,我得到“innerSortFunction”:对象为null或未定义“错误。有什么建议吗?看来这是个时间问题。如果我用一个等待1秒的超时函数替换onload,它99%的时间都能工作。我真的不想设置超时,我宁愿等待innerSortFunction被定义。但是我不太清楚如何编写代码来等待它。我的HTML目前是这样开始的:它没有DOCTYPE。我试着在头后面添加DOCTYPE和meta,但是上面说:HTML1115:X-UA-Compatible meta标记('IE=edge,chrome=1')被忽略,因为文档模式已经完成。您添加了哪个DOCTYPE,并且您确认它是发送到浏览器的第一个字节了吗?您的
标记前面有一个
标记???DOCTYPE应该是HTML中的第一件事;它不应该是“在头部之后”。我有一种恶心的感觉,那就是页面是通过一个注入链接标签的代理来提供的。这将是最糟糕的情况,并且不允许将“添加doctype”作为解决方案:(@Joe Frambach:我添加了HTML doctype。这不是页面上的第一件事。页面是由PHP代码生成的。我可以将其更改为我想要的任何内容。我将首先尝试使用doctype。
/* for Internet Explorer */
/*@cc_on @*/
/*@if (@_win32)
    document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
    var script = document.getElementById("__ie_onload");
    script.onreadystatechange = function() {
        if (this.readyState == "complete") {
            sorttable.init(); // call the onload handler
        }
    };
/*@end @*/
window.onload = sorttable.init;
window.onload = function() { 
    sorttable.init();
    sorttable.innerSortFunction.apply(document.getElementById("Symbol-2"), []); 
};