【问题标题】:Javascript window.open size not working properly. Height okay, width messed upJavascript window.open 大小无法正常工作。高度还行,宽度搞砸了
【发布时间】:2012-08-26 22:08:28
【问题描述】:

我遇到了一些 JavaScript 和 window.open 方法的问题。

我正在尝试根据当前时间控制弹出窗口的大小。小时控制高度,分钟(四舍五入到最接近的五位)控制宽度。

高度控制工作正常,并且对应于正确的值...但是宽度始终为我的屏幕的 100%,我不知道为什么。

我已经放置了一个测试警报,向我显示它应该放入 window.open 方法的文本,这看起来很好 - 事实上,如果我将警报中的文本复制并粘贴到代码中并重新加载页面,那么高度和宽度都可以完美地工作。看起来很奇怪。

这是我的代码...

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>Untitled</title>
    <meta name="generator" content="BBEdit 10.1" />

<script type="text/javascript">

var d = new Date();
var h = 10*(d.getHours())+300
var m = d.getMinutes();

m = 10*(Math.round(parseInt(m)/5)*5)+300;

var a = "width=";
var b = ", height=";

var size = "'"+a+m+b+h+"'";

var openWin = function(){window.open('','',size)};


function test() {alert(h); alert(m); alert(size);}

</script>
</head>


<body onload="test()">


<input type="button" value="Open Window" onclick="openWin()" />

</body>
</html>

【问题讨论】:

  • 为什么要制作一个大小为小时和分钟的窗口?
  • var size = "'"+a+m+b+h+"'"; 这一行确实让人难以阅读(一般而言)。我不建议写这样的东西
  • 你不能可靠地控制窗口大小,至少在某些浏览器中这样做肯定会失败。

标签: javascript variables methods size window.open


【解决方案1】:

你的大小有引号。

你想要什么:

var size = a+m+b+h;
window.open('','',size)

window.open('','', 'width=' + m + ', height=' + h)

你目前拥有的东西(在用 size 代替它的真实情况之后):

window.open('','','"width=' + m + ', height=' + h +'"')

计算结果为:

window.open('','','"width=500, height=450"')

【讨论】:

    【解决方案2】:

    您的代码中有几个错误。

    1. 您不需要 parseInt(m)。 m 已经 类型的数字。但是,如果您仍想在此处使用 parseInt,请指定一个基数!否则 parseInt 会猜测,这会使前导零的数字被解析为八进制数而不是十进制数。

    2. 不要在此处使用“'”:"'"+a+m+b+h+"'";。这不会使您的字符串成为“更多”字符串,它只会使 ' 成为您的字符串的一部分。如果你想在添加一些变量的时候强制键入String,那么只需先添加一个空字符串:var myString = '' + a + b + c

    这个可以解决你的问题。

    【讨论】:

    • 感谢您的评论...这解决了它,我明白为什么,所以我学到了一些东西!我实际上并没有编写 parseInt(m) 位 - 我是从谷歌那里得到的,所以我不太确定它是什么意思!如果您不介意的话,可以给我一个简短的解释就好了?
    • 它解析一个字符串并尝试将其变成一个数字:de.selfhtml.org/javascript/objekte/unabhaengig.htm#parse_int(如果你喜欢,请考虑投票给我的答案。)
    • @LeJared—如果parseInt 的参数是类型号并且需要以 10 为底,则不提供基数没有问题。此外,parseInt 不会猜测基数,它会根据 ECMA-262 中的规则确定默认值。从 ES5 开始,如果没有提供基数,它总是设置为 10(前导零不能导致 parseInt 将值视为八进制)。尽管在使用 ES5 之前的实现时提供基数仍然是一个好主意。
    • 是的,如果 parseInt 已经是一个数字,它不会改变它。但是,如果有前导零,浏览器中的当前实现将触发八进制模式。您可以轻松地自行检查。试试 parseInt('08');它给出 0。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    相关资源
    最近更新 更多