gpt4 book ai didi

c# - JavaScript window.open 有时返回 null

转载 作者:行者123 更新时间:2023-11-28 08:20:36 28 4
gpt4 key购买 nike

我正在尝试维护一个不是我编写的系统(我们不是都这样吗?)。它是用 C Sharp 和 JavaScript 编写的,带有 Telerik 报告。

它在 JavaScript 中包含以下代码,当用户单击按钮以在单独的窗口中显示报表时运行:

var oIframe = $("iframe id='idReportFrame' style='display:none' name='idReportFrame' src=''>");
oIframe.load(function() { parent.ViewReports(); });

oIframe.appendTo('body');

try
{
$('#idReportForm').attr('target', 'idReportFrame');
$('#idReportForm').submit();
}
catch (err) { // I did NOT write this
}

然后是加载函数:

function ViewReports()
{
var rptName = $("#ReportNameField").val();

if (rptName == '') { return false; }

var winOption = "fullscreen=no,height=" + $(window).height() + "left=0,directories=yes,titlebar=yes,toolbar=yes,location=yes,status=no,menubar=yes,scrollbars=no,resizable=no, top=0, width=" + $(window).width();
var win = window.open('@Url.Action("ReportView", "MyController")?pReportName=' + rptNameCode, 'Report', winOption);
win.focus();
return false;
}

当我执行此操作时(至少在 Chrome 中),它会弹出窗口并将报告放入其中。然而,c# 代码中的断点表明它被调用了 2 或 3 次。 JavaScript 中的断点以及 Chrome 中 JavaScript 调试环境中的小日志的检查表明,对 win.focus() 的调用在成功之前失败了一两次。它返回一个未定义的值,然后看起来上面的第一个例程又被执行了。

我倾向于认为这是某种计时问题,除了据我所知 window.open() 调用应该是同步的,而且我不知道为什么它有时会成功而不是其他。有一个在窗口加载时执行的例程,也许这会以某种方式搞砸 open() 的值的返回。

我不太懂 JavaScript,那些懂 JavaScript 的人现在可能已经知道了。如果我放在这里的代码中有一些内容你可以告诉我不正确,那就太好了;我更希望有人能够解释框架中的弹出报告应该如何工作。希望我可以做到这一点,而不必替换太多我已有的代码,因为它很脆弱,而且我们可以说,它并不是在考虑重构的情况下编写的。

最佳答案

据我所知,window.open 在打开失败时将返回 null。某些原因可能会阻止浏览器多次打开其他窗口;也许它是一个弹出窗口拦截器。

实际加载 url 和创建窗口是异步完成的。

https://developer.mozilla.org/en-US/docs/Web/API/Window.open

关于c# - JavaScript window.open 有时返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23019586/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com