IE9下uploadify在模态窗口里无法弹出选择文件窗口的问题

公司的新项目用了高端洋气的uploadify,看起来比原来的老掉牙上传附件功能要“炫酷”多了。我用我的破XP里的IE8开发时没碰到什么问题,后来测试用IE9一测就有各种问题了。
如果把uploadify放在一个模态窗口里,window.showModalDialog("URL", "", "params");
IE9再点击上传控件时,就会没有任何。当把模态窗口关闭时,选择的文件窗口才会弹出来。更雷人的是,当把这个选择文件窗口关闭时,IE9直接卡死崩溃,屡重现不爽,销魂指数高达五星。
另外值得一提的是,同样的问题也出现在另一款jquery的flash上传控件AjaxUploader之中,看来所有维护jquery+flash上传控件的团队都需要在IE9下重新测试一下自己的项目了。

这个问题,搞了半天也没搞出什么太像样的解决方案。后来想出一个略囧的半解决方案:用非模态窗口去代替有上传控件的模态窗口。

function uploadAppendix(){
    if (win==null){
            win = window.showModelessDialog("URL", window, "params");
    }
}

既然是非模态窗口,有许多东西就要自己控制了。加上win==null这个if块,防止用户点开一个上传窗口之后,再点开另一个上传窗口。其他可能与上传窗口存在冲突操作的按钮或者链接什么的,也需要加上同样的if块限制。
再就是如果需要在关闭窗口时刷新父页面的话,务必得加上window这一项。模态窗口想刷新父页面很简单,只需要在父页面中打开模态窗口的地方接下来写一句location.reload(); 这样一关模态窗口,父页面就自动刷新了。
但是非模态窗口不能这么写,程序会不等你关窗口直接就把父页面刷新,非模态窗口也跟着马上消失了。所以刷新需要写在非模态窗口里而不是写在父页面里。传window进去其实就是把父页面传给非模态窗口,让模态窗口自己实现关闭时刷新父页面。

在非模态窗口的jsp里写:

// 刷新父窗口
window.onunload = function(){
    if (window!=null && window.dialogArguments!=null){
        window.dialogArguments.location.reload();
    }
};




阅读更多
个人分类: web
上一篇IE8开发人员工具消失(透明、打不开)的完全解决方案
下一篇用js返回上一页并刷新
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭