火狐升级到5、6的坑爹bug【有关火狐应用中心】

最近几个同事升级了ff到5和6,于是有人向我报告了一个bug,说是一个上传图片的功能失效了,关键是有的升级有问题,有的升级之后又没有问题。

于是我检查下,发现这个问题太坑爹了,居然是由一个插件引起的,就是更新之后出现的那个由火狐魔镜升级的火狐应用中心。

具体原因:

上传图片使用的是jquery的一个插件:ajaxfileupload.js,里面有段代码是这样的:

if (io.contentWindow) {                    
xml.responseText
= io.contentWindow.document.body ? io.contentWindow.document.body.innerHTML : null;
xml.responseXML
= io.contentWindow.document.XMLDocument ? io.contentWindow.document.XMLDocument : io.contentWindow.document;
}

.......

data
= type =="xml"|| data ? r.responseXML :r.responseText;

......

return data;

问题来了,按照原来的意思,返回的data是一个对象,然后eval出来,可是如果装了火狐应用中心之后,返回的data是"{}<div></div>"的形式,就是在xml.responseText里面包含了一段HTML代码,而这段HTML代码就是

火狐应用中心默认提供的,于是后面的解析华丽丽的失败了。

DIV里面的形式是:

<div style="position: absolute; display: none; z-index: 9999;" id="livemargins_control">
<img src="chrome://livemargins/skin/monitor-background-horizontal.png" style="position: absolute;left:-77px;top:-5px" height="5" width="77">
<img src="chrome://livemargins/skin/monitor-background-vertical.png" style="position: absolute;left:0;top:-5px;">
<img id="monitor-play-button" src="chrome://livemargins/skin/monitor-play-button.png" onmouseover="this.style.opacity=1" onmouseout="this.style.opacity=0.5" style="position: absolute;left:1px;top:0;opacity:0.5;cursor:pointer">
</div>

当它还是火狐魔镜的时候,没有问题的,可是一升级,问题就来了,重点是,这个还是默认提供的。

所以需要检查data的内容,把这段HTML代码剔除掉

data = data.replace(/<div.*<\/div>/,'');

然后再返回处理。

具体晚上再分析,我先去解决问题。

原文地址:https://www.cnblogs.com/xesam/p/2144729.html