【问题标题】:onbeforeunload not working in codeigniteronbeforeunload 在 codeigniter 中不起作用
【发布时间】:2021-03-13 23:29:52
【问题描述】:

我有非常简单的代码,只是为了在页面刷新之前显示警告。该代码使用 Codeigniter 作为框架(不确定 Codeigniter 是否与问题有关)。我有一个包含以下代码的视图文件(test_v.php):

<?php ?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body >
<p>Test onbeforeunload</p>

<script type="text/javascript">
 window.onbeforeunload = function () {
  return 'Do you really want to perform the action?';
 }
</script>

</body>
</html>

然后我在控制器 test.php 中加载这个视图文件 $this->load->view('test_v');

当我刷新页面时,我希望看到带有文本“您真的要执行该操作吗?”的警告对话框,但根本没有显示任何警告。我已经用 IE、Firefox、Chrome 进行了测试。没有工作。 我也尝试将 js 代码添加到 body 标签中,如下所示:

<body onbeforeunload=" return 'Do you really want to perform the action?'">

也不工作。 有人可以帮忙吗?非常感谢!

【问题讨论】:

  • 您拥有的代码应该可以正常工作。当您单击此稍作修改的版本中的任何一个链接时,您能否验证您是否收到了弹出窗口,jsfiddle.net/043vymod
  • @CBroe,是的,单击任一链接时都会弹出窗口。所以这个问题很可能与 Codeigniter 框架有关。
  • 但是 CI 在服务器端,在客户端编码时应该对客户端的行为影响不大。
  • @CBroe,我刚刚意识到,当我单击链接时出现的弹出窗口显示了一条非常不同的消息。在 Chrome 和 IE 上,它显示“您所做的更改可能无法保存”。但在 Firefox 上显示“此页面要求您确认是否要离开 - 您输入的信息可能不会保存。”。没有一个浏览器显示“您真的要执行该操作吗?”,这是预期显示的内容,对吧?
  • 并非所有浏览器都会显示自定义消息,不会。我猜这种情况下的自定义消息可能存在某种滥用/诈骗的可能性。

标签: javascript php codeigniter onbeforeunload


【解决方案1】:

我建议像这样用作事件监听器:

window.addEventListener('beforeunload', function (e) {
  // Cancel the event
  e.preventDefault(); // If you prevent default behavior in Mozilla Firefox prompt will always be shown
  // Chrome requires returnValue to be set
  e.returnValue = '';
});

the MDN article:

注意:为了防止不需要的弹出窗口,一些浏览器不会显示在 beforeunload 事件处理程序中创建的提示,除非页面已经与之交互。此外,有些根本不显示它们。

可能是您的问题的原因。我在一个页面上进行了测试,直到与该页面交互后才收到警报。

【讨论】:

  • 谢谢你,Mike,但你的代码也不起作用,事实上我以前试过。我不认为这是因为浏览器阻止了警报,因为我尝试在该功能中执行其他操作(例如使用 window.location 重定向到另一个网站),但仍然无法正常工作。我猜这个函数根本没有执行。
  • 如果您使用这个确切的代码,它应该可以工作。您应该只使用一个纯 HTML 文件进行测试,然后从那里开始。
  • 我用 .php 文件进行了测试,就像在 Codeigniter 中使用的那样。你的意思是我必须使用 .html 文件?
  • this fiddle。当您尝试离开页面或重新加载时,您应该会收到提示。
  • 是的。我可以在离开或重新加载页面时得到提示。所以不是浏览器的问题。我猜它与 MVC 结构 Codeigniter 有关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-26
  • 2014-10-12
  • 1970-01-01
相关资源
最近更新 更多