如何在关闭 rad 时刷新父页面 window

How to refresh the parent page on closing the rad window

我使用下面给出的 java 脚本代码打开了一个 rad window。现在我想在关闭 rad window 时刷新我的父页面。为此,我将 jquery 方法 OnSendInviteCloseonclose 事件相关联。现在这段代码刷新了我的父页面,但有时它会给我描述为 "can't execute code from a freed script" 的错误。如何解决此问题或在关闭时重新加载我的父页面(任何其他方式)。

谢谢

var e_showaddresslist = function (sender, args) {
    var url = $page.url.create("Pages/CalendarInvites.aspx?parentScreen=sendInviteWnd");
    var win = $window.createPopup(url,
    {
        size: "750, 500", behaviors: Telerik.Web.UI.WindowBehaviors.Close | Telerik.Web.UI.WindowBehaviors.Maximize | Telerik.Web.UI.WindowBehaviors.Move | Telerik.Web.UI.WindowBehaviors.Reload | Telerik.Web.UI.WindowBehaviors.Modal, name: "sendInviteWnd", onclose: onSendInviteClose
    },
    function () {
        //$page.get_window().set_destroyOnClose(true);
    });
  }

function onSendInviteClose() {
        window.location.reload(true);
}

注意:所有代码都放在 calendar.js 文件中,该文件在父页面和 radwindow 页面中都有引用。

读一读这个What causes the error "Can't execute code from a freed script"

try / catch 解决方案可能对您有所帮助。

您可以将 OnClientColose 挂接到 RadWindow 并使用 document.location.reload() 刷新页面。

function RefreshParentPage()//function in parent page
{
document.location.reload();
}

谢谢,
萨丽莎

确保代码在正确的上下文中执行,即在主页中而不是在 CalendarInvites 页面中。

然后,如果没问题,请尝试像这样添加超时:

function onSendInviteClose() {
 setTimeout(function() {
       window.location.reload(true);
}, 0); //you can also try increasing the timeout.
}

通常,无法从已释放的脚本中执行代码意味着正在处理的内容页面仍在尝试 运行 一些代码,但它是孤立的(例如,它依赖的其他代码已被处理,或者它的上下文消失了 - window 对象)。大多数情况下,这将是 iframe 中的页面(即,在 RadWindow 中),但它也可能是您的主页。

在关闭事件上附加了 'onSendInviteClose' 方法。

 var win = $window.createPopup(url,
    {
        size: "750, 500", behaviors: Telerik.Web.UI.WindowBehaviors.Close |Telerik.Web.UI.WindowBehaviors.Move,  onclose: onSendInviteClose
    }

现在在打开弹出窗口的页面中创建该方法。此函数将在弹出 window 关闭时自动触发。

function onSendInviteClose() {
    //get a reference to the current RadWindow
    var wndow = GetRadWindow();
    wndow .Close();
    // and as this method is present in parent page
    // we can refresh the page controls easily.
}

function GetRadWindow() {
    var oWindow = null;
    if (window.radWindow) oWindow = window.radWindow;
    else if (window.frameElement.radWindow) oWindow = window.frameElement.radWindow;
    return oWindow;
}