onbeforeunload 困境:iframe 中断与刷新/后退按钮点击时烦人的消息

发布于 2024-08-24 08:28:28 字数 510 浏览 10 评论 0原文

我正在实现一个名为 SearchInsideOut 的搜索服务。 此搜索服务只是将网页结果替换为完整网页(是的,我使用了 iframe)。

我必须处理的问题是 iframe 破坏页面。
我发现的有前途的解决方案是使用 onbeforeunload 让用户决定是留下还是离开我的网站。
但这也造成了另一种令人讨厌的行为。 当用户点击我网站中的其他链接时,onbeforeunload也会被触发。

幸运的是,我可以通过将 window.onbeforeunload=null 放置在我网站的这些链接的 onclick 事件中来解决此问题。
不幸的是,我不知道如何检测外部事件,例如单击“刷新/返回”按钮。
我该怎么做才能解决这个困难呢?

高度赞赏所有建议和意见。

I'm implementing a search service called SearchInsideOut.
This search service simply replaces web page results by full web pages (Yes, I used iframe).

The problem I have to deal with is iframe-breaking pages.
The promising solution I found is using onbeforeunload to let users decide whether to stay or leave my site.
But this also creates another annoying behavior.
When users click other links in my site, onbeforeunload will also be triggered.

Fortunately, I could solve this case by placing window.onbeforeunload=null in the onclick event of those links of my site.
Unfortunately, I have no idea how to detect external events like clicking "refresh/back" buttons.
What should I do to solve this difficulty?

All suggestions and comments are highly appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

祁梦 2024-08-31 08:28:28

以这个网站为例。在您输入一些回复帖子的文字后尝试刷新页面。您将看到该页面会要求您继续工作或退出。在不回复帖子的情况下再进行一次测试,只需刷新即可,您会看到确认不会显示,因为该网站正在测试“答案”是否为空。
示例:

<html>
<head>
<script>
function closeIt()
{
  var mytext = document.getElementById("mytext").value;
  if(mytext != "")
     return "Any string value here forces a dialog box to \n" + 
         "appear before closing the window.";
}
window.onbeforeunload = closeIt;
</script>
</head>
<body>
  <textarea id="mytext"></textarea>
</body>
</html>

因此,由您决定该框何时显示或不显示。另请访问 Microsoft Msdn 了解何时以及 onbeforeunload 的工作原理

Take as example this site. Try to refresh the page after u typed some text answering to a post. You will see that the page it will ask you to continue ur work or exit. Make another test without answering to a post, just refresh, you will see that the confirm will not showed, because the site is making a test if the "answer" is empty or not.
Example:

<html>
<head>
<script>
function closeIt()
{
  var mytext = document.getElementById("mytext").value;
  if(mytext != "")
     return "Any string value here forces a dialog box to \n" + 
         "appear before closing the window.";
}
window.onbeforeunload = closeIt;
</script>
</head>
<body>
  <textarea id="mytext"></textarea>
</body>
</html>

So it's up to u to decide when the box will show or not. Visit also Microsoft Msdn to understand when and how onbeforeunload works

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文