gpt4 book ai didi

javascript - 按名称查找通过 POST 打开的子窗口

转载 作者:行者123 更新时间:2023-11-30 14:03:08 25 4
gpt4 key购买 nike

我的问题的症结在于:如何判断通过表单提交启动的窗口是否真的启动了?

我继承了一个在 Apache 服务器上使用 CGI 和 Perl 的凌乱的旧网站。它是几十年前写的,代码即使对于 Perl 来说也非常糟糕,所以我想避免更改太多,因为我们有数百个客户使用的数百个报告。
最初的问题是,当按下“确定”按钮时,有时似乎没有任何反应,因为这个过程需要很长时间,所以用户会一直点击它。这会在运行 Apache 的 Unix 机器上产生许多新进程并导致问题。 “程序员”设计站点的方式,他在表单标签的目标属性中放置了一个名称。这通常会(最终)使用该名称打开一个新窗口。

<form name="PARAMETERS"
method="POST"
action="reportsrv.cgi"
onsubmit="watchChild('_REPORT1556723905', 'reportSubmit3', true);"
target="_REPORT1556723905">

另一位程序员尝试通过使用 java 脚本禁用 OK 按钮然后让新打开的窗口找到其父窗口然后启用该按钮来解决此问题。当在我们的托管环境中时,这不起作用,有时新窗口根本没有打开。所以我们的客户认为发生了什么事,但实际上并没有发生(因为窗口没有打开,启用按钮的 javascript 从未运行)。
我写了一个简单的函数,它使用 setTimer 来查找窗口并查看它是否打开,但找到它的唯一方法是使用 window.open() 函数。

function watchChild(targetName, thebuttonname, disable) {
setTimeout( function()
{
var child = window.open("", targetName); // opens new window if not found!
if (!child) {
child = window.frames[targetName];
}
var child = window.frames[targetName];
if (child) {
alert('child found');
if (disable) {
//disableButton(thebuttonname, disable);
}
watchChild(targetName, thebuttonname, false);
return;
}
// frames are empty
alert('child not found: ' + targetName + '; frame count = ' + window.frames.length);
//disableButton(thebuttonname, false);
}, 3000 );

现在我的问题是找到窗口(如果它存在)的唯一可靠方法是 window.open("", Name) 但如果窗口不存在则打开一个空白窗口。
子窗口的逻辑是在该过程完成之前不呈现任何内容(这可能需要很长时间),所以我不能在此之前向它添加 javascript。
任何人都可以看到一种方法来判断窗口是否打开而不打开另一个窗口吗?如果它没有被表单提交事件打开,我可以保留对它的引用。

最佳答案

我怀疑你可以适应 this technique根据您的情况。

如果没有,我会想到另一种方法:

  • 不要禁用提交按钮(或只是短暂禁用)。
  • submit 处理程序中,让 JavaScript 代码主动打开窗口以响应表单提交,并禁用表单提交。
  • 让 JavaScript 代码加载的页面表明进程正在运行。
  • 让该页面回调到它的 opener 以说明它何时已加载。
  • 通过以编程方式提交表单来响应(如果您使用 DOM 自己的 HTMLFormElement#submit 方法执行此操作,它不会触发 submit 处理程序;一些工具就像 jQuery ,所以要小心)。
    • 这将使表单指向已经打开的窗口。
  • 如果您希望该按钮在整个报告过程中都处于禁用状态,请让响应页面中的代码与 opener 联系,告诉它响应已到达(因此 opener 重新启用按钮)。还要在执行相同操作的“加载”页面中设置超时(并显示超时错误)。

关于javascript - 按名称查找通过 POST 打开的子窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55938933/

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