Skip to content
govo edited this page Aug 19, 2012 · 7 revisions

Discuz 7.2 IE9 Chrome兼容性修正脚本。

此版本为Discuz 7.2专用,编码为gb2312,如需要用utf-8版本,进行转码即可。

使用方法:

直接覆盖原include/js/common.js,然后清空论坛缓存文件即可。

PS:记得备份原来的文件,成型良好的文件管理习惯。

修改了哪些内容?

1. 添加更精确的浏览器判断

使用了http://www.quirksmode.org/js/detect.html的BrowserDetect object 原来的浏览器判断把Firefox和Chrome判断为同一个浏览器。新增的与旧的无冲突。

2. 主要问题是对iframe内容的获取出错

问题出在function ajaxpost 中的对iframe内容获取问题上,以下内容对IE9和非最新版本的Chrome已无效:

if(BROWSER.ie) { s = $(ajaxframeid).contentWindow.document.XMLDocument.text; } else { s = $(ajaxframeid).contentWindow.document.documentElement.firstChild.nodeValue; }

因为在IE9中,iframe内的文档类型会与父窗口一致,在这里不再为xml文档类型,而是html,唯一获取其内容的方法是

document.body.innerHTML

或者

window.parent.ajaxPostContent=document.childNodes[0].innerText

而前者的噪音很大,最好的方法是把后者的CDATA部分取出:

innerText..replace(/^((\n|.)?)〈![CDATA[/i,"").replace(/]]〉(\n|.)?$/i,"")

在新版的Chrome中,xml内容被分散到几个childnode中,所以需要一个循环来获取全部内容:

for(var i = 0;i<length;i++){ s+= xmlNodes[i].nodeValue;}

Discuz 7.2的其它问题(与本脚本无关,但可以对整体起到优化作用)

模板empty()对部分变量判断会有误,造成生成的标签嵌套混乱,可以把判断出错的换个相关变量,如$inajax,具体此处不详述。 好几个模板在文件存多1个的错误,主要体现在首页、帖子查看和列表,具体请自行测试。