我有一些加载外部JavaScript文件的网页,如下所示:
<script src="sorttable.js"></script>这个包来自于这里:可吸附
我在onload函数中引用它,如下所示:
<script type="text/javascript">
window.onload = function() { sorttable.innerSortFunction.apply(document.getElementById("Symbol-2"), []); }
</script>这在Firefox和Chrome上工作得很好,但是在IE9.0.2版本上,它在这些消息中失败了:
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以及其他浏览器上吗?
发布于 2014-05-21 17:32:47
看起来,SortTable库正在使用某种恶意浏览器检测,试图尽早初始化库:
(摘自库源代码)
/* 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处理程序:
window.onload = sorttable.init;但是您正在用自己的处理程序覆盖onload处理程序,所以这永远不会执行。
我认为最简单的解决方案就是修改onload处理程序以执行初始化:
window.onload = function() {
sorttable.init();
sorttable.innerSortFunction.apply(document.getElementById("Symbol-2"), []);
};你应该都准备好了。init()方法有一个内部检查,以防止它执行两次初始化,所以如果已经调用了它,就不需要担心调用它的问题。
发布于 2014-05-21 17:12:49
您很可能需要正确设置您的doctype。如果您使用的是<!DOCTYPE html>,那么尝试添加
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">或
<meta http-equiv="X-UA-Compatible" content="IE=9">敬你的<head>。
另外,确保在doctype之前没有发生任何事情。包括空格和换行符。检查html的输出,而不是服务器端代码中的源代码。
否则,回到不同的doctype,并重新测试您的其他浏览器。
发布于 2014-05-21 17:17:47
这是IE的一个安全问题,尽管这可能会修复它:
<script type="text/javascript">
sorttable.innerSortFunction.apply(document.getElementById("Symbol-2"), []);
</script>脚本已经是同步的,但是如果不起作用,尝试将脚本移到body标记之后
https://stackoverflow.com/questions/23789726
复制相似问题