Javascript 除非更改IE中的安全设置,否则弹出窗口将以小尺寸打开
我正在使用IE8,我有以下javascriptJavascript 除非更改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
<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