FineUI 官方论坛

标题: IE7下弹出窗口出现滚动条时Alert出现JS错误 [打印本页]

作者: 泗水亭长    时间: 2012-3-30 16:37
标题: IE7下弹出窗口出现滚动条时Alert出现JS错误
在IE7下,弹出一个ext window窗口,window窗口里的页面如果高度超过了window的高度时,window会自动出现滚动条。出现滚动条后 就会引发一些问题。比如 ext button不响应,alert报JS错误。其中以alert报错最为要命,因为找不到其他替代方案。我研究了好久好久也没找到解决办法。希望三石先生关注一下。谢谢

作者: 〓飚〓    时间: 2012-3-30 16:43
贴出代码嘛,暂时没遇到过这样的问题
作者: 泗水亭长    时间: 2012-3-30 16:47

<ext:Button ID="Button1" runat="server" Text="点击此按钮弹出一个带滚动条的window" OnClick="Button1_Click">
    </ext:Button>
    <br />

<ext:Window ID="EditTaskWin" Title="测试window里滚动条" Hidden="true" EnableIFrame="true" runat="server"
        IsModal="true" Width="800px" Height="600px" EnableClose="true" EnableMaximize="true"
        Target="arent" WindowPosition="Center" >
    </ext:Window>

下面是弹出窗口页面
<body>
    <form id="form1" runat="server">
    <extageManager ID="ageManager1" runat="server" />
    <div style="height:800px;">
       <ext:Button ID="btnTest" Text="点击此按钮查看alert是否报错" runat="server"
            onclick="btnTest_Click"></ext:Button>
    </div>
    </form>
</body>
    public partial class TestWindow : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnTest_Click(object sender, EventArgs e)
        {
            ExtAspNet.Alert.Show("出现滚动条后,出错了吗?");
        }
    }

作者: 〓飚〓    时间: 2012-3-30 16:58
没出错呀~~
作者: 泗水亭长    时间: 2012-3-30 17:06
IE6 IE9 没问题,IE7有问题,很多网友都已经测试确认了这个问题了
作者: sanshi    时间: 2012-3-30 17:52
这是 泗水亭长 给我的测试例子: [attach]173[/attach]

这个问题在IE7下的确存在。


作者: sanshi    时间: 2012-3-30 17:56
这个问题在Firefox,IE8,IE9下都不存在,只在IE7下存在,重新步骤:
1. 打开测试页面,单击按钮弹出窗口。
2. 确保弹出窗口出现滚动条,点击显示Alert对话框的按钮。
3. 弹出Alert对话框,此时还没问题。
4. 点击Alert对话框的标题,就报错了。

[attach]174[/attach]

打开extjs源代码,定位到如下片段:
[attach]175[/attach]

调试后发现,在IE7下,进来的node参数可能为null,所以在null.nodeName时自然会出错。


=====================================
其实解决办法很简单,当node不存在时不要往下执行函数了。

这个函数的本意是判断某个节点是否是有效的可拖动DOM节点,node为空时肯定就不是了,所以逻辑上也是对的。

所以,我们可以简单的修改extjs的源代码来解决这个问题:
  1. isValidHandleChild: function(node) {
  2. if(!node){ return false; }
  3. ....
复制代码

=====================================
但是上面的做法不太好,尽量不要修改别人的源代码,否则升级时会遇到问题。
没关系,我们只需在外面覆盖这个函数:
  1. // 修正IE7下,窗口出现滚动条时,点击Window控件标题栏有时node为null的问题
  2. var originalIsValidHandleChild = Ext.dd.DragDrop.prototype.isValidHandleChild;
  3. Ext.dd.DragDrop.prototype.isValidHandleChild = function (node) {
  4.     if (!node || !node.nodeName) {
  5.         return false;
  6.     }
  7.     return originalIsValidHandleChild.apply(this, [node]);
  8. };
复制代码

解决!



=====================
这个修正会出现在 v3.1.1中,如果你在使用以前的版本,可以下载ExtAspNet的源代码,把上面的一段JS代码加在js/x.js的最后,重新编译工程就行了。




作者: sanshi    时间: 2012-3-30 18:06
@泗水亭长,方便把你们项目放点截图到《基于 ExtAspNet 的项目展示区》。。。
作者: 泗水亭长    时间: 2012-3-30 19:20
好的,我想请问一个问题:
我之前调试虽然也定位到了出错的地方,但为什么我看到的JS代码显示为一行,没有任何格式,可读性非常不好。为什么您截图的出错代码页面是有格式的呢?
作者: 30372245    时间: 2012-3-30 19:51
我找extjs的没压缩源代码调试,不过一般不需要这样,extjs本身出现bug的情况还比较少
作者: 泗水亭长    时间: 2012-3-31 10:25
在安装有IE7以上版本的浏览器的服务器上 选择兼容IE7的模式 的确问题解决了,但是在只安装IE7的服务器上 有滚动条的弹出窗口里的按钮 点击后 还是 无响应。alert提示框里的【确定】按钮点击后 也是无响应。大家如果已经安装了IE以上版本,可以用IE tester 新建一个IE7选项卡 进行测试。也能重现这个问题。
作者: sanshi    时间: 2012-3-31 20:21
这个BUG找的我好辛苦,一行一行的删除代码,最终定位到了QuickTips,还是extjs本身的浏览器兼容性为题。
现在已经搞定,ChangeSet:75361

+修正原生的IE7(非IE8下的IE7模式)中,iframe中的页面出现滚动条时,页面上的所有按钮都不能点击了(泗水亭长)。
        -最终发现是初始化QuickTips时出的问题,必须这样初始化Ext.QuickTips.init(false);,这是Extjs本身的兼容性问题。
        -Ext.QuickTips.init - autoReader:True to render the QuickTips container immediately to preload images.。


作者: 泗水亭长    时间: 2012-4-1 12:15
自己顶起来,希望大家关注下。
作者: sanshi    时间: 2012-4-1 14:29
泗水亭长 发表于 2012-4-1 12:15
自己顶起来,希望大家关注下。

你确认一下上面的解决方案是否有效,还有你把重复发的一个帖子删了吧。
作者: 泗水亭长    时间: 2012-4-3 23:05
好的。您辛苦了
作者: 泗水亭长    时间: 2012-4-6 10:55
我在公司服务器上确认了,问题ok了。谢谢您了




欢迎光临 FineUI 官方论坛 (https://fineui.com/bbs/) Powered by Discuz! X3.4