我有一个名为“电子邮件选定成员”的 Django 管理操作。检查一些成员并单击 Go 按钮,打开用户的邮件程序。所选成员的电子邮件已预先输入。
这由 Django HttpResponseRedirect(uri) 工作,uri 为“mailto:email1,email2.. 其中地址 email1,email2 ...在服务器上查找。
唯一的问题是浏览器重定向到空白页面以及打开客户端邮件程序。
有没有办法避免这种情况?
——彼得
这个问题有点老了,但我刚刚经历了这个,我想我可以帮助任何人在未来寻找答案。
我遇到了这个问题,因为我正在构建的网站有一个内置的跟踪系统,可以跟踪自托管广告的出站链接的 URL。如果我不重定向,就没有办法(不改变它的实现方式)来跟踪点击,因为我没有使用 API 或任何东西。
简单的解决方法是做你所做的,发回HttpResponse()
其内容是元标记
<meta http-equiv="refresh" content="0;url=mailto:youremail@test.com" />
这会导致页面在加载时刷新,从而触发mailto:
操作。
现在我们只剩下一个打开的窗口,但我们不能使用 Javascript 的window.close()
方法关闭窗口。但是,我确实相信这个解决方案应该有效。刷新成功后调用该 Javascript 函数。
不幸的是,我没有对此进行测试,但这两种方法应该完成一个mailto:
不会留下空白窗口/选项卡的重定向。
希望这可以帮助!
不要使用 HttpResponseRedirect。只需将 mailto: 设为链接即可。<a href="mailto:email1...">Email selected members</a>
我不认为这是可能的。RFC 2616 说重新 302 重定向:
临时 URI 应该由响应中的 Location 字段给出。除非请求方法是 HEAD,否则响应的实体应该包含一个简短的超文本注释,其中包含指向新 URI 的超链接
所以我看到的空白页是(非常)简短的超文本注释。浏览器获取重定向指令,弹出一个带有重定向消息的临时页面,然后检索重定向的 URL。但是使用 mailto: URL,临时页面显然仍然存在。