当前位置 > 首页 > Asp.net

ExtAspNet应用技巧(四) - 怪异的IE

2009-7-28 2:28:00来源:Asp.net

问题描述:
最近我一直被 ExtAspNet 中一个怪异的问题所困扰,有很多网友遇到这个问题:
http://www.cnblogs.com/sanshi/archive/2009/07/14/1523634.html?login=1#1593949
http://www.cnblogs.com/sanshi/archive/2009/07/14/1523634.html?login=1#1596122
http://extaspnet.codeplex.com/WorkItem/View.aspx?WorkItemId=5185
问题也很怪异,页面http://extasp.net/data/grid_iframe.aspx 中点击“编辑”,会弹出一个窗口,
窗口中加载一个IFrame页面,如下图所示:


但就是这个弹出窗口中的IFrame页面,很多网友反映第一次为空白,必须重新点击一次“编辑”才能显示IFrame页面。并且这个问题只在IE7下出现。
在Firefox,Chrome和IE8下都没这个问题。
我自己觉得更奇怪的是我新装的IE7居然没这个问题,反倒是Maxthon和IETester有这个问题。
=================================================================
解决思路:
1. 对比找到差异
我首先想到的是另外一个页面 http://extasp.net/iframe/grid_iframe.aspx 也有类似的弹出窗口的功能,但是就没有上述问题。于是我第一个做的就是
把两个页面的源代码拿来对比,看有哪些不一样。终于发现正确的页面ext:Window设置为 Target="_parent" (也就是说弹出窗口在父页面弹出),而出现问题
的页面的 ext:Window 的Target="_self" (也就是在本页面弹出窗口)。
虽然找到了出错的地方,但这不是根本的解决办法。

2. 页面寻找思路
还是回到页面,因为本机IE7下还是重现不了这个问题,只有Maxthon下才有,而Maxthon下貌似没有啥可用的开发工具(比如IEDeveloperToolbar,第一次用Maxthon不太了解),
只能眼睁睁的等着空白的页面:

对于开发人员来讲,这是一件多么痛苦的事情,没有一件可用的调试工具(即使给我一个Firebug的lite版本也行啊)。
不过,事情还不至于太糟糕,首先我想确定的是页面是不是已经加载了,在空白处点击 右键->"查看源代码" ,发现整个HTML都是对的,
为什么会不显示呢?然后我尝试 右键->"刷新",页面居然可能正常加载。 
郁闷。

3. 还是看看底层JS吧 
打开ExtAspNet\js\box\ExtAspNet-Window.js,找到设置弹出窗口中IFrame的地方:
// 创建或更新IFrame节点,同时更新panel实例中的自定义属性值
    box.wnd.updateIFrameNode = function(panel, iframeUrl) {
        
if (panel['box_property_iframe']) {
            
// 如果此Panel中包含有IFrame
            if (!panel['box_property_iframe_loaded']) {
                
// 如果此Panel中包含的IFrame还没有加载
                if (iframeUrl) {
                    panel[
'box_property_iframe_url'= iframeUrl;
                }
                panel[
'box_property_iframe_loaded'= true;
                panel.body.dom.innerHTML 
= _createIFrameHtml(panel['box_property_iframe_url'], panel['box_property_iframe_name']);
            }
            
else {
                
// 如果IFrame已经加载,则更新

  • Oxite2插件机制分析

    2009-9-22 6:24:00

    摘要: 小组希望我写一些关于Oxite2的插件机制的文字。我以前没有接触过插件机制,因此答应介绍这个话题,因为我可以就着Oxite2的源码趁机学习一下哈。我们小组是Oxite2开源项目学习小组,这篇

  • Template Method模板方法模式

    2007-7-25 17:52:00

    行为模式: 行为型模式涉及到算法和对象间职责的分配。将注意力从控制流转移到对象间的联系方式上来。 行为模式分为: 行为类模式 和 行为对象模式 。 行为类模式使用 继承机制 在类间分派行为 ;

  • 评论表聚集索引引起的评论超时问题

    2009-12-5 17:25:00

    阅读: 324 评论: 15 作者: 博客园团队 发表于 2009-12-05 14:41 原文链接   从昨天开始,发评论的超时问题给大家带来了麻烦,请大家谅解!   现在问题已经

  • WPF自定义控件——使用Win32控件

    2009-6-3 13:40:00

    虽然WPF很强大,但是有些东西win32做的已经很好,我们完全可以拿来主义。   一.如何创建一个win32控件   1.首先定义一个WNDCLASSEX

  • ASP.NET MVC 3: Server-Side Comments with Razor

    2010-11-13 13:13:00

    Earlier this week we shipped the ASP.NET MVC 3 Release Candidate .  It supports “go live” dep

  • What Dynamic Data REALLY is

    2009-11-17 4:20:00

    In my recent posting “ What do you think of Dynamic Data? ”, users have offered many views on what

  • LINQ in Action samples in LINQPad

    2009-6-7 0:55:00

    Do you know LINQPad ? Its a really simple but great tool for testing LINQ queries. Not only tha

  • .Net Framework 4.0: Enumerating file system objects

    2009-10-27 20:07:00

    In my last posting I introduced new ReadLines() method and new overloads for WriteAllLines() metho

  • 安装.net4.5可以删除4.0吗?

    2012-8-9 9:23:00

    4.5正式版已经完成了,如果安装了最新版的4.5,是否可以删除老版的4.0?? WIN7系统 Wer keinen starken Willen hat, kann nie eine hoh

  • Net设计模式实例之享元模式( Flyweight Pattern)

    2010-1-21 14:25:00

    阅读: 234 评论: 2 作者: 灵动生活 发表于 2010-01-21 10:53 原文链接 一、享元模式简介( Brief Introduction )