我使用下面给出的java脚本代码打开了一个rad窗口。现在我想在关闭rad窗口时刷新我的父页面。为了达到这个目的,我已经将一个jquery方法 OnSendInviteClose 与 onclose 事件相关联。现在这段代码刷新了我的父页面,但有一段时间它给了我错误描述为"无法从一个释放的脚本执行代码"。如何解决此问题或重新加载我的父页面(任何其他方式)。
由于
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页面都有引用。
答案 0 :(得分:0)
阅读此What causes the error "Can't execute code from a freed script"
try / catch解决方案可能对您有所帮助。
答案 1 :(得分:0)
您可以将 OnClientColose 挂钩到RadWindow并使用document.location.reload()刷新页面。
function RefreshParentPage()//function in parent page
{
document.location.reload();
}
谢谢,
萨里萨
答案 2 :(得分:0)
确保代码在正确的上下文中执行,即在主页面中而不是在CalendarInvites页面中执行。
然后,如果可以,请尝试添加如下的超时:
function onSendInviteClose() {
setTimeout(function() {
window.location.reload(true);
}, 0); //you can also try increasing the timeout.
}
通常,无法从释放的脚本执行代码意味着正在处理的内容页面仍在尝试运行某些代码但是它是孤立的(例如,它所依赖的其他代码片段被丢弃,或者它的上下文消失了 - 窗口对象)。通常这将是iframe中的页面(即RadWindow内部),但它也可能是您的主页面。
答案 3 :(得分:0)
附上了'onSendInviteClose'关闭事件的方法。
var win = $window.createPopup(url,
{
size: "750, 500", behaviors: Telerik.Web.UI.WindowBehaviors.Close |Telerik.Web.UI.WindowBehaviors.Move, onclose: onSendInviteClose
}
现在在打开弹出窗口的页面中创建该方法。弹出窗口关闭时,此功能将自动触发。
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;
}