Javascript 删除“;闪光“;使用Internet Explorer模式框时的页面之间

Javascript 删除“;闪光“;使用Internet Explorer模式框时的页面之间,javascript,html,internet-explorer,dhtml,Javascript,Html,Internet Explorer,Dhtml,我有一个特定于IE的内部web应用程序,并使用了许多特定于IE的模式框:(window.showModalDialog) 我最近收到一个请求,要求在站点页面之间导航时删除“flash”。为了实现这一点,我刚刚在母版页中添加了一个元转换标记: <meta http-equiv="Page-Enter" content="blendTrans(duration=0.0)" /> 除了模态框之外,这一切都非常有效。当您启动一个模式框,然后移动它时,它后面的网页会保留模式框的轨迹,而不

我有一个特定于IE的内部web应用程序,并使用了许多特定于IE的模式框:(window.showModalDialog)

我最近收到一个请求,要求在站点页面之间导航时删除“flash”。为了实现这一点,我刚刚在母版页中添加了一个元转换标记:

<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>

试验
showmodaldialdialog('modal.htm',window);

您尝试过来自的解决方案吗?它说您需要向head部分添加一个元素(如果您有未设置样式的内容问题[而不是白页问题])

也来自:

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


确保所有页面的标题中都有一个元素,并确保将这些样式表放在标题部分的顶部,元素放在后面(最好放在所有页面内容之后,紧靠结束标记之前)


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


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

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

<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>

试验
var modal=window.open('modal.htm','u blank','height=500,width=600,status=no,toolbar=no,menubar=no,location=no,resizeable=no,titlebar=no');

如果可能的话,我会尽量避免内置页面转换

如果您所指的“flash”是在请求之间重新加载的页面。我会看两个不同的方面:

缓存

考虑将图像放入CSS精灵和/或确保内容文件的过期日期较长。如果您的页面在闪烁,那是因为浏览器必须在每次请求时从服务器获取大量内容

CSS精灵-CSS精灵是在一个文件中包含多个较小图像的图像,然后使用背景位置CSS属性引用这些图像。这种技术的好处是:

  • 减少了对服务器的请求
  • 加载一个页面后,其他页面上的图像已缓存在浏览器中(在精灵中)
  • 内容补偿-如果您的页面正在闪烁,但页面之间的页面布局相似。这可能是服务器迫使浏览器在请求之间使内容过期并每次重新下载所有内容的症状。查看IIS中设置的页眉,或者考虑设置CDN。

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

    Ajax

    如果希望完全避免页面闪烁,则需要开始使用Ajax样式的请求来处理页面请求。由于您使用的是ASP.NET,因此有许多选项可供选择,以下是其中两个选项:

    更新面板-更新面板的伸缩性相当好,因为您可以在单个按钮或整个页面周围放置更新面板。使用Ajax请求将更新面板中的所有内容发布到服务器,然后使用结果更新面板。根本没有页面闪烁!我不使用更新面板来支持关闭下一个选项,它提供了更多的控制,但更高级

    jQuery和Web服务——正如我在上面所描述的,但是使用Web服务(或页面方法)和jQuery的Ajax方法控制流程

    我希望这有帮助


    Rich

    不完全是一种解决方案,而是一种中间解决方案:当用户停止拖动模式窗口时,尝试手动重新绘制页面-设置“缩放:1”到BODY标记。我建议不要在拖动时重新绘制页面-这将是一个过度的操作
    <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>