zoukankan      html  css  js  c++  java
  • 用window.showModalDialog()打开的页面Request.UrlReferrer为null

    今天在解决一个问题,怎么也找不到解决方案。我的一个窗体是IE通过window.showModalDialog()打开的,但为了防止用户手工输的地址,所以我需要判断是通过别的页面调整获得,用Request.UrlReferrer判断,在IE下其值却为null,chrome是正确的,在IE下每次打开页面都提示重新登录,这我就郁闷了,我搜索了很多文档,又说location.herf打开的页面Request.UrlReferrer==null,却很少提window.showModalDialog()打开的页面的来源页面也为null,更别说解决方案了。window.showModalDialog()本身就属于IE特有的方法,而且还存在bug,真让人郁闷至极。

    也正是IE支持的方法给了我灵感,既然在其他浏览器(我只测试了chrome)下Request.UrlReferrer是有值的,IE为null,那为什么不利用IE的模态窗体来判断,是否打开的模态窗体呢?

    于是我试着去写代码测试一下,代码如下:

      //如果缓存中没有记录或者来源页面为null时,需要重新登录
                if (CookieManage.GetCookieValue() == "0" || Request.UrlReferrer==null)
                { 
                    //如果使用showModalDialog打开的页面,来源页面页面也为null,则需要判断是否打开的是模态窗体。
                    Response.Write("<script type='text/javascript'>if(window.dialogHeight==null){alert('用户未登录,请登录'); location.href='/Login.aspx';}</script>");
                }

    通过对代码的测试,正是我想要的结果。棘手的问题终于解决了。

    但本人不确认这种处理方式是否科学,或者有别的更好的方法。不过目前确实解决了我的问题。

    也希望我的方法可以给大家灵感找到更好的解决方案。

    另:window.showModalDialog()确实存在兼容性问题,但我们项目用的就是这种方法,目前不会变动,不知道大家有没有更好的办法兼容其他浏览器如chrome,目前在chrome中使用window.open()但不是模态,且可以改变窗体大小,即有最大最下化按钮,大家有没有没有办法去掉这两个按钮。

  • 相关阅读:
    暑期项目经验(七)--struts+jasperreporters
    暑期项目经验(六)--struts+json
    暑期项目经验(五)--struts+ajax
    暑假项目总结(四)--struts
    搭建python selenium pytest自动化测试环境
    --查询被锁的表
    具体实例教你如何做LoadRunner结果分析
    http://www.tuicool.com/articles/EJRv6jm醒醒吧少年,只用cucumber不能帮助你BDD
    loadrunner录制脚本,页面无法显示
    selenium中hidden或者是display = none的元素定位到但是不可以操作怎么办?
  • 原文地址:https://www.cnblogs.com/bjherry/p/4398565.html
Copyright © 2011-2022 走看看