【问题标题】:Navigate away script not working导航离开脚本不起作用
【发布时间】:2013-10-03 15:37:40
【问题描述】:

所以,为工作创建一个门户网站。老板希望我在用户离开页面时将其注销。找到这个教程:http://kbeezie.com/cross-browser-exit-pop/

我使用了 jquery 示例并将其插入到几个页面中进行测试。我正在使用 asp.net/C# 进行开发。这是页面的基本布局,包括我的脚本:

<%@ Page ... %>
<asp:Content .. > </asp:Content>
<asp:Content .. >

   //my navigate away function
   <script type="text/javascript">
      function PopIt() {
         return "Are you sure you want to leave?";
      }

      $(document).ready(function () {
         window.onbeforeunload = PopIt;
          $("a").click(function () { window.onbeforeunload = null; });
      });
   </script>

   <div>
      <table></table>
      //other stuff
   </div>
</asp:Content>

当我单击我们的门户网站上的链接时,导航离开脚本有效,它不会弹出,因为我们正在单击内部链接。但是,如果我继续在网站上浏览,最终点击 2 或 3 次后,如果我点击内部链接,它会询问我是否确定要离开。谁能告诉我为什么会这样?

编辑:我们在每个页面上都引用了 jquery,所以这不是问题。

编辑:这是一个有效的JSFiddle。当您单击该链接时,什么也没有发生,但是当您离开时它会提示。

【问题讨论】:

  • 我不确定您为什么会遇到您所描述的问题,但我不知道该代码会对您离开门户有何反应。它将使 每个 链接删除 onbeforeunload 处理程序,无论是否本地。
  • 我们的页面上没有任何指向外部网站的链接,这就是为什么这个解决方案适用于我们,因为它可以捕获所有内容(访问 Google、关闭浏览器等)跨度>
  • 是触发卸载的链接最终在不应该发生的情况下发生,是在母版页内容中呈现的链接,还是不同的页面呈现?
  • 有些在页面本身(通过&lt;asp:HyperLink&gt;),有些在其他页面上生成。

标签: c# javascript jquery asp.net


【解决方案1】:

由于生成了一些链接,因此当您分配覆盖onbeforeunload 处理程序的事件处理程序时,它们不会出现在页面上。试试这个...

<script type="text/javascript">
    function PopIt() {
        return "Are you sure you want to leave?";
    }

    $(document).ready(function () {
        window.onbeforeunload = PopIt;
        $("document").on("click", "a", function () {
            window.onbeforeunload = null;
        });
    });
</script>

它将捕获所有链接点击,无论脚本运行时链接是否在页面上。

【讨论】:

  • 这仍然不起作用。单击链接时,我仍然会看到一个对话框。有没有可能我的脚本标签在错误的位置或什么地方?不知道还有什么问题。
  • 这应该处理页面上的所有a标签。您的页面上没有带有链接的 iframe 吗?如果没有看到整个页面,就很难猜出问题可能是什么。
  • 是的,我知道这就是我开始发帖时担心的问题。页面上没有框架。我大约 90% 确定 ASP.Net 搞砸了。
【解决方案2】:

所以在尝试了一周左右之后,我放弃了。几天后,我的一位同事向我提到,我们从中继承的一个基类有一个运行OnPreInit 的脚本阻止函数。

我一直怀疑在我们的大型代码库中的某个地方有什么东西覆盖了我的 OnBeforeUnload 功能,但是当我搜索 OnBeforeUnload 的用途时,我什么也没找到。事实证明,我从来没有找到脚本拦截器,因为有人认为将其命名为不起眼的名字是个好主意!

覆盖脚本阻止程序后,原始代码可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 2020-01-06
    • 2015-09-09
    • 2012-03-20
    相关资源
    最近更新 更多