Python 2 WSGI场景下执行post请求后关闭浏览器标签的方案咨询
解决方案
你可以根据改造成本选择以下两种方案,均满足最小改动要求:
方案1:仅修改后端代码(前端零改动,优先推荐)
不需要修改现有前端页面的任何代码,只需要调整WSGI服务中foo路由的返回内容即可:
- 原有
foo函数的业务逻辑执行完成后,直接返回一段包含自动关闭JS的HTML响应即可。原有表单提交后跳转的/foo页面会加载这段代码,执行后立即关闭页面。
Python 2 WSGI 示例代码:
def foo(environ, start_response): # 原有业务逻辑保留不动 # ... 你的原有代码 ... # 新增返回内容 status = '200 OK' headers = [('Content-type', 'text/html; charset=utf-8')] start_response(status, headers) return ['<html><script>window.close();</script></html>']
方案2:仅修改前端页面代码(无需调整后端逻辑)
给现有form表单添加提交事件拦截,阻止默认的跳转行为,异步提交表单后主动关闭页面,改动量仅几行:
修改后的前端代码如下:
<form method="post" action="foo" onsubmit="submitAndClose(event)"> <input type="submit" value="Submit and foo!"/> </form> <script> function submitAndClose(e) { // 阻止默认的表单跳转行为 e.preventDefault(); // 异步提交表单数据 fetch('/foo', { method: 'POST', body: new FormData(e.target) }).then(function() { // 提交完成后关闭页面 window.close(); }); } </script>
注意事项
受浏览器安全策略限制,window.close()仅能关闭由JavaScript调用打开的页面,如果用户是手动输入地址、从书签打开该页面,部分浏览器会阻止关闭操作,该限制无法绕过。
内容的提问来源于stack exchange,提问作者EagleOne
相关产品推荐
相关产品推荐

