如何FireFox下实现IE的showModalDialog的功能?
找遍了网络上的文章都是说设置一下 'modal=yes ' 就可以,例如:
window.open( 'openwin.html ', 'newWin ', 'modal=yes,width=200,height=200,resizable=no,scrollbars=no ');
实际上我在firefox 最新版本 2.0.0.6 上试过n遍,它只是打开一个窗口,窗口是可以随便切换的!!! 根本实现不了ie的showModalDialog的功能.
请大家使用firefox2.006版本,测试一下,或者给个解决方案,谢谢!
有些朋友说可以,请注明一下你的firefox版本,谢谢!
[解决办法]
用var win = window.showModalDialog()不行吗?呵呵。
[解决办法]
可以用css模拟,网上很多
[解决办法]
通过DIV模拟模态,代码
<html>
<head>
<style type= "text/css ">
#id1{width:100%;height:100%;background-color:red;position:absolute;top:0;left:0;z-index:49;display:none; filter:Alpha(opacity=25);
}
#id2{top:200px;position:absolute;z-index:50;display:none;border:3px solid #E5E5E5; left:100px;background-color:white;}
</style>
</head>
<body>
<div id= "id2 ">
<table height= "100 " width= "200 ">
<tr>
<td>
<div id= "ShowMSG "> </div>
</td>
</tr>
<tr>
<td align= "center "> <input class= "Button60 " onclick= "divhide() " type= "button " value= "close " name= "btnDo ">
</td>
</tr>
</table>
</div>
<input type= "button " onclick= "divshow( 'okok ') " value= "click ">
sdljfoguiougoshohgo
<div id= "id1 "> okokokokokokokoko </div>
</body>
<script language= "javascript ">
function divshow(showmsg){
document.getElementById( "id1 ").style.height=window.screen.height+ "px ";
document.getElementById( "id1 ").style.width=window.screen.width+ "px ";
document.getElementById( "id1 ").style.display= 'block ';
document.getElementById( "id2 ").style.display= 'block ';
document.getElementById( "ShowMSG ").innerText = showmsg;
}
function divhide(){
document.getElementById( "id1 ").style.display= 'none '
document.getElementById( "id2 ").style.display= 'none '
}
self.onError=null;
currentX = currentY = 0;
whichIt = null;
lastScrollX = 0; lastScrollY = 0;
NS = (document.layers) ? 1 : 0;
IE = (document.all) ? 1: 0;
<!-- STALKER CODE -->
function heartBeat(){
if(IE){ diffY = document.body.scrollTop; diffX = document.body.scrollLeft; }
if(NS){ diffY = self.pageYOffset; diffX = self.pageXOffset; }
if(diffY != lastScrollY){
percent = .1 * (diffY - lastScrollY);
if(percent > 0) percent = Math.ceil(percent);
else percent = Math.floor(percent);
if(IE) document.all.id2.style.pixelTop += percent;
if(NS) document.id2.top += percent;
lastScrollY = lastScrollY + percent;
}
if(diffX != lastScrollX){
percent = .1 * (diffX - lastScrollX);
if(percent > 0) percent = Math.ceil(percent);
else percent = Math.floor(percent);
if(IE) document.all.id2.style.pixelLeft += percent;
if(NS) document.id2.left += percent;
lastScrollX = lastScrollX + percent;
}
}
<!-- /STALKER CODE -->
<!-- DRAG DROP CODE -->
function checkFocus(x,y){
stalkerx = document.id2.pageX;
stalkery = document.id2.pageY;
stalkerwidth = document.id2.clip.width;
stalkerheight = document.id2.clip.height;
if( (x > stalkerx && x < (stalkerx+stalkerwidth)) && (y > stalkery && y < (stalkery+stalkerheight))) return true;
else return false;
}
function grabIt(e){
if(IE){
whichIt = event.srcElement;
while (whichIt.id.indexOf( "id2 ") == -1){
whichIt = whichIt.parentElement;
if (whichIt == null){ return true; }
}
whichIt.style.pixelLeft = whichIt.offsetLeft;
whichIt.style.pixelTop = whichIt.offsetTop;
currentX = (event.clientX + document.body.scrollLeft);
currentY = (event.clientY + document.body.scrollTop);
} else {
window.captureEvents(Event.MOUSEMOVE);
if(checkFocus (e.pageX,e.pageY)) {
whichIt = document.id2;
stalkerTouchedX = e.pageX-document.id2.pageX;
StalkerTouchedY = e.pageY-document.id2.pageY;
}
}
return true;
}
function moveIt(e){
if (whichIt == null){ return false; }
if(IE){
newX = (event.clientX + document.body.scrollLeft);
newY = (event.clientY + document.body.scrollTop);
distanceX = (newX - currentX); distanceY = (newY - currentY);
currentX = newX; currentY = newY;
whichIt.style.pixelLeft += distanceX;
whichIt.style.pixelTop += distanceY;
if(whichIt.style.pixelTop < document.body.scrollTop) whichIt.style.pixelTop = document.body.scrollTop;
if(whichIt.style.pixelLeft < document.body.scrollLeft) whichIt.style.pixelLeft = document.body.scrollLeft; if(whichIt.style.pixelLeft > document.body.offsetWidth - document.body.scrollLeft - whichIt.style.pixelWidth - 20) whichIt.style.pixelLeft = document.body.offsetWidth - whichIt.style.pixelWidth - 20;
if(whichIt.style.pixelTop > document.body.offsetHeight + document.body.scrollTop - whichIt.style.pixelHeight - 5) whichIt.style.pixelTop = document.body.offsetHeight + document.body.scrollTop - whichIt.style.pixelHeight - 5;
event.returnValue = false;
} else{
whichIt.moveTo(e.pageX-StalkerTouchedX,e.pageY-StalkerTouchedY);
if(whichIt.left < 0+self.pageXOffset) whichIt.left = 0+self.pageXOffset;
if(whichIt.top < 0+self.pageYOffset) whichIt.top = 0+self.pageYOffset;
if( (whichIt.left + whichIt.clip.width) > = (window.innerWidth+self.pageXOffset-17)) whichIt.left = ((window.innerWidth+self.pageXOffset)-whichIt.clip.width)-17;
if( (whichIt.top + whichIt.clip.height) > = (window.innerHeight+self.pageYOffset-17)) whichIt.top = ((window.innerHeight+self.pageYOffset)-whichIt.clip.height)-17;
return false;}
return false;
}
function dropIt(){
whichIt = null;
if(NS) window.releaseEvents (Event.MOUSEMOVE);
return true;
}
<!-- DRAG DROP CODE -->
if(NS){
window.captureEvents(Event.MOUSEUP|Event.MOUSEDOWN);
window.onmousedown = grabIt;
window.onmousemove = moveIt;
window.onmouseup = dropIt;
}
if(IE){
document.onmousedown = grabIt;
document.onmousemove = moveIt;
document.onmouseup = dropIt;
}
if(NS || IE) action = window.setInterval( "heartBeat() ",1)
</script>
</html>
[解决办法]
我也刚好遇到楼主同样的问题正发愁呢,刚才实验了一下楼上的用div模拟的效果,瞒好的可惜就是自己css太差劲了,不太会修改,公司进度要求很紧,也没有让我们必须兼容firefox只能放弃了,以后再研究,谢谢楼主和楼上的兄弟
[解决办法]
忘了一点nhpyliner(兄弟)的方法在firefox下,透明和拖拽不起作用.
[解决办法]
modal=yes,
在ff下曾经有效过
据说后来因为有安全问题,又把它拿掉了。
碰到一点问题,不仔细思量出对策,
而是直接弃械投降,
这真是ff的耻辱啊。
[解决办法]
基本上能在ff上正常浏览的网页都能在ie上浏览,能在ie上看的网页就不一定能在ff上看了, 这就是IE强的地方.
======================================================================
仿佛不是这么理解“强”的吧?呵呵。
[解决办法]
http://www.dynamicdrive.com/dynamicindex8/dhtmlwindow/dhtmlmodal.htm
[解决办法]
我觉得比较讽刺吧...
自称 "标准 "的ff很多页面看不了...
但是IE是肯定能看的...
我初装IE7的时候把user-agent改成firefox都没发现不妥...
如果从用户角度...
谁理你标准不标准啊...不妨碍我正常浏览就行了...可FF很多页面看不了...
从程序员角度...
一个功能相当不完善的标准要来干嘛...写着多累啊...
插件吧...我反倒觉得IE的插件好用...
微软官方的WebDeveloper也有,还有HTTPWatch,ie7pro...
如果用Maxthon也可以自己写...我就写了个运行脚本的...
脚本调试器就微软出的都甚至有3种:
1.就叫脚本调试器的那个玩意
2.Office带的脚本编辑器
3.VS.NET
[解决办法]
为这些兼容性问题花费了不少时间,真的很烦人的呀。
有时候领导的要求挺BT的,但我们是做程序的,只有一点一点的想办法去解决。。
除非你不想做了。。。
