Javascript window.open 未打开到我传入的大小

问题描述 投票:0回答:1

我们有一个安全屏幕,可以使用我编写的新自定义脚本 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 工作?

javascript asp.net vb.net webforms
1个回答
0
投票

语法不使用“:”,但您要使用“=”

例如;

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。

© www.soinside.com 2019 - 2024. All rights reserved.