我们有一个安全屏幕,可以使用我编写的新自定义脚本 showWin 打开弹出对话框。
安全屏幕:
Private Sub SecCheck()
Dim sScreenName As String = String.Format("{0}", Request("SCREEN"))
Dim memb As MembershipUser = Membership.GetUser(User.Identity.Name)
If Roles.IsUserInRole(memb.UserName, sScreenName) Then
Dim params As String = String.Format("{0}", Request("PARAMS"))
If Not String.IsNullOrWhiteSpace(params) Then
params = String.Format("?{0}", Request("PARAMS").Replace("$", "&"))
End If
Dim size As Size = ClaimsInfo.SecurityDB.GetScreenSize(sScreenName)
' Derive Java String
Dim target As String = String.Format("frm{0}.aspx", sScreenName)
Dim link As String = String.Format("{0}{1}", target, params)
Dim height As String = CStr(size.Height)
Dim width As String = CStr(size.Width)
Dim parent As String = "self" ' Session("IFrame")
If (String.IsNullOrEmpty(parent)) Then
parent = "_blank"
End If
Dim js As String = String.Format("showWin('{0}', {1}, {2}, 1, '{3}', '{4}');self.close();", link, width, height, target, parent)
imgSec1.Attributes.Add("onLoad", js)
End If
End Sub
我在上面定义的
js
处放置了一个断点,我可以看到发送的文本是:
showWin('frmHEIPayment.aspx', 886, 505, 1, 'frmHEIPayment.aspx', 'self');self.close();
每次我调用它时,对话框都会全屏打开。我什至编辑了上面的 JavaScript 命令行以使用尺寸
200
和 200
,但对话框仍然打开完整尺寸。
showWin的 JavaScript 如下:
function showWin(link, width, height, type, target, sParent) {
width = width || 400;
height = height || 200;
var features =
'width:' + width + 'px,' +
'height:' + height + 'px,' +
'toolbar=no,' +
'location=no,' +
'menubar=no,' +
'resizable=yes,' +
'scrollbars=yes';
target = target || "_blank";
var childWindow = window.open(link, target, features);
switch (type) {
case 0:
return false;
break;
case 1:
__doPostBack();
sParent = sParent || "self";
childWindow.opener.location = sParent;
break;
case 2:
CloseDialogSessionExpired(window, 2)
return false;
break;
default:
return false;
break;
}
}
此外,showWin不会用
self.close()
关闭安全屏幕,就像我使用旧的jsOW(JavaScript打开窗口)代码时发生的情况一样。
我需要替换使用 IE 的旧 jsOW JavaScript
window.showModalDialog
:
function jsOW(link, width, height, type, sName) {
var sFeature = "status:no;dialogWidth:" + width + "px;dialogHeight:" + height + "px;dialogHide:true;help:no;scroll:no";
if (type == "1") {
var vVar = window.showModalDialog(link, window, sFeature);
if (typeof (vVar) == 'boolean') {
return vVar;
} else {
switch (vVar) {
case 0:
return false;
break;
case 1:
__doPostBack();
break;
case 2:
CloseDialogSessionExpired(window, 2)
return false;
break;
default:
return false;
break;
}
}
}
}
它以正确的尺寸显示表单,但它仅适用于 IE 或 Edge 的兼容模式。
如何让这个 JavaScript 工作?
语法不使用“:”,但您要使用“=”
例如;
window.open('mychild.aspx', 'childWindow', 'width:800px, height=400, top=200, left=200')
因此尝试这个:
var features =
'width=' + width + 'px,' +
'height=' + height + 'px,' +
'toolbar=no,' +
'location=no,' +
'menubar=no,' +
'resizable=yes,' +
'scrollbars=yes';
一般来说,您不必提供“px”部分。如果你想将窗口从左上角向下移动,你可以在上面添加top=200,left=200。