【问题标题】:Why is Firefox 6 ignoring my height, width, top and left settings in javascript window.open?为什么 Firefox 6 忽略我在 javascript window.open 中的高度、宽度、顶部和左侧设置?
【发布时间】:2011-09-01 15:11:19
【问题描述】:

谁能看到我的代码有什么问题?它在 IE 中正常运行,但 Firefox 6 似乎忽略了我传递给 javascript window.open 调用的任何高度或宽度设置。我看不出它有什么明显的问题,但 javascript 不是我的第一语言,所以我可能在这个地方犯了一个 noob 错误。

此功能的目的是打开一个以屏幕为中心的 800x600 窗口,并在 IE 和 Mozilla 系列浏览器中以模态方式显示。

<html>
<head>

<script language="javascript" type="text/javascript">
    function openWindow(pageURL,Title,w,h) 
    {
        var left = (screen.width/2)-(w/2);
        var top = (screen.height/2)-(h/2);
        if (window.showModalDialog) {
            window.showModalDialog(pageURL,Title,'dialogWidth:' + w     + 'px,dialogHeight:'+ h + 'px,dialogTop:'+ top + 'px,dialogLeft:' + left + ',resizable=no');
        } else {
            window.open(pageURL,Title,"toolbar=no, location=no, directories=no,     status=no, menubar=no, scrollbars=yes,resizable=no,modal=yes,     copyhistory=no,width=" + w + ", height=" + h + ", top=" + top + ", left=" + left)
        }
    }   

</script>
</head>
<body>
<a href="javascript:openWindow('http://www.google.com','Google',800,600);">Launch</a>
</body>
</html>

为了澄清一点,该函数旨在测试 ShowModalDialog 的存在(假设只有 IE 支持它)并在支持 W3C window.open 命令的所有内容中落入正确的 window.open 分支,该命令实现“模态”选项。这个想法是,如果实现了 ShowModalDialog,那么它将使用它,否则将 window.open 与“Modal”选项一起使用。

【问题讨论】:

  • showModalDialog 现在基本上所有浏览器都支持了,所以假设只有 IE 会落入该代码路径是一个错误的假设。

标签: javascript html firefox web


【解决方案1】:

showModalDialog 中的分号,而不是逗号:

<html>
<head>

<script language="javascript" type="text/javascript">
    function openWindow(pageURL,Title,w,h) 
    {
        var left = (screen.width - w) / 2;
        var top = (screen.height - h) / 2;
        var options;
        if (window.showModalDialog) {
            options = 'dialogwidth:' + w     + ';dialogheight:'+ h + ';dialogtop:'+ top + ';dialogleft:' + left + ';resizable=no';
            console.log(options);
            window.showModalDialog(pageURL, Title, options);
        } else {
            options = "toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes,resizable=no,modal=yes, copyhistory=no, width=" + w + ", height=" + h + ", top=" + top + ", left=" + left;
            console.log("window.open options: " + options);
            window.open(pageURL, Title, options)
        }
    }   

</script>
</head>
<body>
<a href="javascript:openWindow('http://www.google.com','Google',800,600);">Launch</a>
</body>
</html>

【讨论】:

  • 奇怪的是 IE 版本 (showmodaldialog) 在 IE 中运行良好。
  • 感谢 Sam,Firefox 6 掉入了 ShowModalDialog 分支,这是我没有预料到的,实际上是逗号而不是分号使我传入的选项无效。好消息!我从来没有想过:)
【解决方案2】:

showModalDialog()window 的有效成员吗?我在文档中找不到它。

编辑:刚刚做了一个快速的谷歌搜索。 showModalDialog 不是 W3C 标准,未在 Firefox 中实现。

编辑:我错了。 Firefox 屈服并开始支持它。

【讨论】:

  • 那不正确,Firefox 3+ 支持window.showModalDialog
  • 通常检查浏览器是否支持对象或方法的最简单方法是在控制台中输入它!
  • 在这个函数中,只有在浏览器支持的情况下才应该执行 showModalDialog,我的意图是只有 IE 会落入该分支,并且任何基于 Mozilla 的东西都会使用正确的 window.open 命令跨度>
  • 只是一个快速更新 - 我没想到 Firefox 6 会支持 ShowModalDialog 所以它意外地通过了流程中的那个分支,我所有的尝试都在另一个分支中 - 坚持那里的警报显示它正在流入 ShowModalDialog 分支,然后 Sam 建议用分号替换逗号导致我传递给 ShowModalDialog 的选项被应用,瞧 - 启用了高度和宽度:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-12
  • 1970-01-01
相关资源
最近更新 更多