代码之家  ›  专栏  ›  技术社区  ›  AaronS

使用Internet Explorer模式框时删除页面之间的“Flash”

  •  6
  • AaronS  · 技术社区  · 14 年前

    我有一个内部Web应用程序,它是特定于IE的,并且使用了很多特定于IE的模式框:(window.showModalDialog)。

    我最近收到一个请求,要求删除“闪存”时,浏览网页的网站。为了实现这一点,我在主页上添加了一个元转换标记:

    <meta http-equiv="Page-Enter" content="blendTrans(duration=0.0)" />
    

    除了模式框外,这一切都非常有效。当您启动一个模式框,然后移动它时,它后面的网页会跟踪模式框,而不是重新绘制网页内容。这可以防止用户移动模式框来读取其背后的任何内容。

    有没有一种方法可以防止IE特定站点中页面之间的“闪现”,并且该站点仍然使用模式框?

    请注意,这是一个大型且复杂的站点,因此将其重新架构为不使用模式框不是一个选项。

    这是一个ASP.NET,C Web应用程序,我的所有用户都在使用IE7和IE8,如果有什么不同的话。

    -编辑-

    若要复制此内容,请将以下内容放入HTML页,然后在Internet Explorer中打开:

    <html>
    <head>
        <title>Test</title>
        <meta content="blendTrans(duration=0.0)" http-equiv="Page-Exit">
    </head>
    <body>
    <script language="javascript">
        window.showModalDialog('modal.htm', window);
    </script>
    </body>
    </html>
    
    3 回复  |  直到 14 年前
        1
  •  2
  •   David Murdoch    14 年前

    你有没有尝试过 this page ?它说您需要在头部添加一个<link/>元素(如果您有未样式化的内容问题[而不是白页问题])。

    也来自 Yahoo's Best Practices :

    HTML规范清楚地指出,样式表将被包含在页面的头上:“不像A,[Link ]可能只出现在文档的头部分,尽管它可能出现任何次数。”无论是空白屏幕还是空白样式的内容,都不值得冒风险。最佳解决方案是遵循HTML规范并将样式表加载到文档头中。


    确保在所有页面的头部都有一个<link/>元素,并确保将这些样式表放在 顶部 标题部分和<script/>元素 之后 它们(最好在所有页面内容之后和结束标记之前)。


    我知道你说过你不能使用模态,但我想我将分享一个JS模态使用的例子 jQuery facebox . 您甚至不必修改对“showModalDialog”的调用(如果您最终使用这种模式方法,您仍然可以使用元页面退出页面转换技巧)。

    window.showModalDialog = function(a){
         $.get(a,function(html){
             $.facebox(html);
         });
    };
    window.showModalDialog('linkOnSameDomain.htm', window);
    
        2
  •  1
  •   SpliFF    14 年前

    您的问题是ShowModalDialog不处理DirectX曲面(这是您在处理过滤器和转换时最终会遇到的问题)。当对话框存在时,IE没有在底层表面上执行屏幕更新。您别无选择,只能停止创建这些曲面(停止使用过渡)或使用如下所示的弹出窗口。唯一的区别是,新窗口不会锁定底层页面(这通常是一件好事,但如果应用程序依赖于底层页面,则可能需要阻止进一步的脚本运行),如果将结果返回给父级(如“确定/取消”),则可能需要以不同的方式处理对话框中的任何按钮。

    请注意,IE8安全设置可以限制您可以隐藏多少Chrome。如果必须隐藏地址栏,则需要在每个用户PC的相关安全区域中设置“允许网站打开没有地址栏或状态栏的窗口”。

    <html>
    <head>
        <title>Test</title>
        <meta content="blendTrans(duration=0.0)" http-equiv="Page-Exit">
    </head>
    <body style="background: transparent url(/images/backgrounds/brushed_aluminium.jpg) scroll repeat top left">
    <script language="javascript">
        var modal = window.open('modal.htm', '_blank', 'height=500,width=600,status=no,toolbar=no,menubar=no,location=no,resizable=no,titlebar=no');
    </script>
    
    </body>
    </html>
    
        3
  •  1
  •   kim3er    14 年前

    如果可能的话,我将避免内置的页面转换。

    如果您所指的“flash”是在请求之间重新加载页面。我将研究两个不同的领域:

    高速缓存

    考虑将图片放入CSS精灵和/或确保您的内容文件有很长的过期日期。如果你的页面在闪烁,那是因为浏览器必须在每次请求时从服务器上抓取很多东西。

    css sprites-css sprites是在一个文件中包含多个较小图像的图像,然后使用background position css属性引用这些图像。这种技术的好处是:

    1. 减少了对服务器的请求。
    2. 一旦加载了一个页面,其他页面上的图像就已经缓存在浏览器中(在sprite中)。

    内容补偿-如果页面正在闪烁,但页面之间的布局类似。这可能是服务器强迫浏览器在请求之间终止内容并每次重新下载所有内容的症状。查看由IIS在您的内容上设置的标题,或者考虑设置一个cdn。

    cdn是一个专门为另一个站点提供内容的网站。但是,cdn的关键特性是头文件和cookie被禁用,这使得请求更快,并将缓存完全留给浏览器。

    阿贾克斯

    如果您想完全避免页面刷新,就需要开始使用Ajax样式的请求来处理页面请求。因为您使用的是ASP.NET,所以有许多选项可供选择,下面是其中的两个选项:

    更新面板-更新面板的规模相当大,可以将更新面板放在单个按钮或整个页面上。更新面板中的所有内容都使用Ajax请求发布到服务器上,然后面板将随结果一起更新。完全没有页面刷新!我不使用更新面板来支持下一个选项,它提供了更多的控制,但是更高级。

    jquery&web服务-我在上面已经描述过了,但是使用web服务(或页面方法)和jquery的ajax方法控制流程。

    希望这有帮助,

    丰富的