今天在解决一个问题,怎么也找不到解决方案。我的一个窗体是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() == "" || 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()但不是模态,且可以改变窗体大小,即有最大最下化按钮,大家有没有没有办法去掉这两个按钮。

用window.showModalDialog()打开的页面Request.UrlReferrer为null的更多相关文章

  1. 用window.showModelDialog() 打开的页面的返回值

    有两个页面也个 Default1.aspx   另外一个是 Default2.aspx Default1.aspx 有个按钮是用来打开Default2.aspx页面的 按钮的js代码是 var win ...

  2. window.open打开新页面,并将本页数据用过url传递到打开的页面;需要两个页面;

    页面1 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8 ...

  3. 解决以showModalDialog打开的页面在提交表单时弹出新窗口的问题

    源代码如下: 父页面: window.showModalDialog("../readfile/readFile.jsp","","dialogWid ...

  4. 关闭浏览器或者关闭使用window.open打开的页面时添加监听事件

    最近工作中有个需求:点击按钮时打开一个页面,此处取名为page1,打开页面的前提条件是如果有人已经打开过page1页面并且没有关闭时请求ajax判断session是否为空,如果为空则将用户名和文档id ...

  5. MVC Request.UrlReferrer为null

    使用情景,登录后返回登录前访问的页面. 这个时候用到了UrlReferrer var returnUrl = HttpContext.Current.Request.UrlReferrer != nu ...

  6. js关闭 window.open 打开的页面

    1.关闭 当前页面 window.opener = null; window.open('', '_self', ''); window.close(); 但是在FF中就是不行: 2.项目中情况是通过 ...

  7. js window.open()打开的页面关闭后刷新父页面

    function test(){ var winObj = window.open(URL); var loop = setInterval(function(){ if(winObj.closed) ...

  8. window.showModalDialog 子窗口和父窗口不兼容最新的谷歌

    最新版的谷歌不支持window.showModalDialog的写法,会出现,找不到方法的问题,同时返回值的方法window.dialogArguments;也用不了. 这里就只能用最原版的windo ...

  9. window.showModalDialog()复制内容

    ShowModalDialog 打开的 页面上加入个 <span id="mySpan" name="mySpan" contentEditable=&q ...

随机推荐

  1. 深入理解Flink ---- End-to-End Exactly-Once语义

    上一篇文章所述的Exactly-Once语义是针对Flink系统内部而言的. 那么Flink和外部系统(如Kafka)之间的消息传递如何做到exactly once呢? 问题所在: 如上图,当sink ...

  2. html+大文件上传

    前言:因自己负责的项目(jetty内嵌启动的SpringMvc)中需要实现文件上传,而自己对java文件上传这一块未接触过,且对 Http 协议较模糊,故这次采用渐进的方式来学习文件上传的原理与实践. ...

  3. python中dict对象和字符串string对象互相转换

    使用json包 import json dict1 = {"A":"a","B":"b"} # 转换为字符串 json. ...

  4. 让SNIPER-MXNet从标准的COCO格式数据集中直接使用file_name作为图片路径

    告别项目中“依index生成路径”的方法,直接使用我们在生成.json标签时就已经写入的图片路径(这里我写入的是绝对路径 full path)来获取图片. 需要做的,用以下代码替换SNIPER/lib ...

  5. redis-5.0.3 redis.conf详解

    # Redis configuration file example. # # Note that in order to read the configuration file, Redis mus ...

  6. codevs 2853:方格游戏

    (排版没搞好,这一行用来卖萌~) 题目描述 Description 菜菜看到了一个游戏,叫做方格游戏~ 游戏规则是这样的: 在一个n*n的格子中,在每个1*1的格子里都能获得一定数量的积分奖励,记左上 ...

  7. Android使用glide加载.9图片的方法

    我们在开发过程中会经常使用.9图片, 因为它可以使图片拉伸的时候,保证其不会失真. 而我们把.9图片放在服务器端,通过glide直接加载,会报错. 我们的解决方法是 通过sdk的aapt工具 把.9图 ...

  8. (二)springMvc 入门

    目录 配置前端控制器 servlet拦截方式 springMvc的配置文件 编写处理器类 配置自定义处理器 配置前端控制器 在 web.xml 配置 DispatcherServlet <!-- ...

  9. 恩佐夫博弈+JAVA大数

    题意:http://acm.hdu.edu.cn/showproblem.php?pid=5973 根号5复制后200位就行了,因为BigDecimal不支持开根号,除法二分开根. import ja ...

  10. oracle练手(一)

    练手001 1.列出至少有一个员工的所有部门 select dname from dept where deptno in (select deptno from emp); select dname ...