Javascript 除非更改IE中的安全设置,否则弹出窗口将以小尺寸打开

Javascript 除非更改IE中的安全设置,否则弹出窗口将以小尺寸打开,javascript,html,internet-explorer,Javascript,Html,Internet Explorer,我正在使用IE8,我有以下javascript <script type="text/javascript"> function popupWindow(url) { w = 1026; h = 760; var left = (screen.width/2)-(w/2); var top = (screen.height/2)-(h/2); window.location.href="/site/testApps#app=testApp&nav=test

我正在使用IE8,我有以下javascript

<script type="text/javascript">
function popupWindow(url) {
  w = 1026;
  h = 760;
  var left = (screen.width/2)-(w/2);
  var top = (screen.height/2)-(h/2);
  window.location.href="/site/testApps#app=testApp&nav=testNav";
  var newWindow = window.open(url, 'windowname', "toolbar=no, location=no, directories=no,   
  status=no, menubar=no, scrollbars=yes, resizable=yes, copyhistory=no, width='+w+', height='+h+',   
  top='+top+',left='+left',screenY='+top+', screenX='+left'");
}
</script>

函数popupWindow(url){
w=1026;
h=760;
左侧变量=(屏幕宽度/2)-(w/2);
变量顶部=(屏幕高度/2)-(高度/2);
window.location.href=“/site/testApps#app=testApp&nav=testNav”;
var newWindow=window.open(url,‘windowname’,“toolbar=no,location=no,directories=no,
状态=否,菜单栏=否,滚动条=是,可调整大小=是,复制历史=否,宽度='+w+',高度='+h+',
顶部=“+top+”,左侧=“+left”,屏幕Y=“+top+”,屏幕X=“+left”);
}
弹出窗口正在成功打开,但问题是它正在以较小的大小打开。 我通过更改IE中的安全设置修复了此问题,如下所示

有人能解释为什么会发生这种情况吗?这个问题的解决方案是什么?没有在IE中更改安全设置

更新: 我们有不同的环境(开发、测试和uat(在安全端口https://)上运行)。只有在使用https运行时,才会出现此问题://
这在dev和test env中运行良好(弹出窗口以适当的尺寸打开)。

尝试更改以下内容

var newWindow = window.open(myURL, 'windowname', "toolbar=no, location=no,
directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes,
copyhistory=no, width='+w+', height='+h+', top='+top+',left='+left',
screenY='+top+', screenX='+left'");
由于没有使用变量,因此它们按字面形式呈现为
top='+top+'

var newWindow = window.open(myURL, 'windowname', "toolbar=no, location=no,
directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes,
copyhistory=no, width=" + w + ", height=" + h + ", top=" + top + ",
left=" + left + ", screenY=" + top + ", screenX=" + left);

您还可以注意到,变量的颜色是返回的,而不是红色,用于表示与原始文本类似的文本。

使用此代码打开弹出窗口

jQuery(".Popup").dialog({
    autoOpen: false,
    height: 385, width: 580,
    minheight: 165, minwidth: 460,
    modal: false,
    buttons: {
        "Close": function () {
            jQuery(this).dialog("close");
        }
    }
});
并调用此
jQuery
函数:

jQuery(".Popup").dialog("open")

如果没有必要有一个新窗口,我建议使用“内部弹出窗口”(例如一个大的DIV,里面有一个iframe)。您可以让jQuery分配所有具有特定类名的锚,以便在内部弹出窗口中打开

一个巨大的好处是,它的跨浏览器,隐私设置独立和完全可设置

这对弹出式杀手也很有效,因为没有真正的弹出式可检测

简单的例子:
$(“a.internal-popup”)。单击(函数(){
//在iframe中加载href URL
$(“#popup iframe”).attr(“src”,$(this.attr(“href”));
//显示弹出DIV
$(“#弹出框”).show();
//防止原始单击
返回false;
});

隐式全局变量 您的w和h变量设置为全局变量。将这些行更改为:

var w = 1026;
var h = 760;
操作顺序 您的代码在调用
newWindow=window.open()
之前设置
window.location.href
,具体取决于特定的win/ie环境,设置location.href值之后的任何操作都可能会产生不可预测的结果。 改为:

var newWindow = window.open(...);
window.location.href = "...";
字符串连接问题: 在window.open的第三个参数中,用双引号开始字符串,然后用单引号转义。使用此选项,不要在实际字符串中包含CRLF:

window.open('about:blank', 'windowname', 'toolbar=no, location=no, directories=no,
    status=no, menubar=no, scrollbars=yes, resizable=yes, copyhistory=no, 
    width='+ w +', height='+ h +', top='+ top +',left='+ left +',
    screenY='+ top +', screenX='+ left
);
IE安全 由于弹出窗口被(现在仍然)广泛滥用,IE在使用
window.open()
时可能会忽略一些窗口参数

    • 请参阅“返回值”部分和“备注”
  • 请参阅“引入保护模式”中的所有3个项目符号

问题的原因是IE8中默认禁用了“允许脚本启动的无大小或位置限制的窗口”设置

转到Internet选项|安全选项卡| Internet-单击“自定义”按钮,然后滚动到杂项部分。请参阅选项“允许脚本启动的窗口不受大小或位置限制”。当设置为禁用时,任何调用打开新窗口的JavaScript函数的链接都将无法调整弹出窗口的大小或位置


将此设置更改为“启用”,窗口将正确调整大小和位置。

“…top='+top+'、left='+left',screenY='+top+'、screenX='+left'”
中的
相关的内容应为
”,或更改
中的外部引号。”
's至
'
's?请在此处显示
/myURL中的代码。更改
href
将加载新页面,并且
window.location.href
之后的任何内容都不会在原始页面上执行。旧页面的变量也消失了。@Teemu/site/apps#app=myApp&nav=testNavEhh。。我是说那个文件里的代码。您发布的代码无法打开弹出窗口,它必须来自另一个页面。@Teemu