首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript可以在除IE之外的所有浏览器上工作。

javascript可以在除IE之外的所有浏览器上工作。
EN

Stack Overflow用户
提问于 2014-05-21 17:09:11
回答 3查看 1.6K关注 0票数 2

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

代码语言:javascript
复制
<script src="sorttable.js"></script>

这个包来自于这里:可吸附

我在onload函数中引用它,如下所示:

代码语言:javascript
复制
<script type="text/javascript">
window.onload = function() { sorttable.innerSortFunction.apply(document.getElementById("Symbol-2"), []); }
</script>

这在Firefox和Chrome上工作得很好,但是在IE9.0.2版本上,它在这些消息中失败了:

代码语言:javascript
复制
HTML1113: Document mode restart from IE9 Standards to Quirks 
SEC7111: HTTPS security is compromised by javascript:void(0) 
SCRIPT5007: Unable to get value of the property 'apply': object is null or undefined 

这是一个内部网站,9.0.2是我的公司部署的版本,我不能升级到更新的版本。

我能让这个工作在IE以及其他浏览器上吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-21 17:32:47

看起来,SortTable库正在使用某种恶意浏览器检测,试图尽早初始化库:

(摘自库源代码)

代码语言:javascript
复制
/* 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 @*/

看起来IE拒绝了这一点,因为它试图在通过HTTPS访问的页面上使用带有javascript:void(0) URL的脚本。

如果库没有特定于浏览器的初始化方法,则库还有一个集线器可以使用onload处理程序:

代码语言:javascript
复制
window.onload = sorttable.init;

但是您正在用自己的处理程序覆盖onload处理程序,所以这永远不会执行。

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

代码语言:javascript
复制
window.onload = function() { 
    sorttable.init();
    sorttable.innerSortFunction.apply(document.getElementById("Symbol-2"), []); 
};

你应该都准备好了。init()方法有一个内部检查,以防止它执行两次初始化,所以如果已经调用了它,就不需要担心调用它的问题。

票数 2
EN

Stack Overflow用户

发布于 2014-05-21 17:12:49

您很可能需要正确设置您的doctype。如果您使用的是<!DOCTYPE html>,那么尝试添加

代码语言:javascript
复制
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

代码语言:javascript
复制
<meta http-equiv="X-UA-Compatible" content="IE=9">

敬你的<head>

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

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

票数 1
EN

Stack Overflow用户

发布于 2014-05-21 17:17:47

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

代码语言:javascript
复制
   <script type="text/javascript">
       sorttable.innerSortFunction.apply(document.getElementById("Symbol-2"), []);
   </script>

脚本已经是同步的,但是如果不起作用,尝试将脚本移到body标记之后

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23789726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档