【问题标题】:How can I replace window.onbeforeunload with custom code?如何用自定义代码替换 window.onbeforeunload?
【发布时间】:2013-09-12 20:50:06
【问题描述】:

出于可访问性的原因,对于我的 Chrome 扩展程序,我需要能够将所有标准的window.onbeforeunload 弹出窗口替换为页内 HTML 替代品。我知道如何创建一个替代骨架,这很简单。

我知道这里的基本思想是window.onbeforeunload = {my substitute code}

我不知道该怎么做是从页面发出的每个确认窗口中获取文本和代码,并将其引导到我的替代品中,以便显示与原始弹出窗口中相同的消息并单击我的替代 confirmleave page(或其他)按钮产生与原始弹出窗口相同的结果。

如何做到这一点?


示例:

你安装了我的扩展(不要问它的目的是什么,无关紧要)。

您开始在 StackOverflow 上写一个问题,然后意识到您已经知道答案并关闭标签。

通常会出现一个确认窗口,询问您是否确定要离开该页面。

但是由于我的扩展,整个页面的 HTML 被向下推了一下,以便为临时 HTML 确认框腾出空间,显示相同的文本和相同的两个按钮,单击时会产生相同的两个结果,所有页内。没有弹出窗口。

【问题讨论】:

  • 那不是window.confirm();那是浏览器的beforeunload 处理程序。我认为你不能轻易覆盖它。
  • 嗯...这是有问题的。
  • 只是出于好奇,你想做什么?
  • @putvande 语音控制。

标签: javascript jquery google-chrome google-chrome-extension


【解决方案1】:

您所说的功能是window.onbeforeunload 事件,不幸的是,唯一可以自定义的方法是为用户提供自定义字符串消息,因为滥用的可能性非常高。

Internet Explorer 在 msdn 上的 api 参考说明:

出现在对话框中的默认语句“Are you sure 你想离开这个页面吗? ... 按 OK 继续,或 取消以留在当前页面。”,无法删除或更改。

我认为这意味着 对话框 本身无法更改,您所能做的就是提供额外的特定于上下文的消息。我找不到 Chrome 的相同参考资料,但那里似乎是同一个故事。

window.onbeforeunload = function() {
    //all you can do is provide a message..
    return "you have unsaved changes, if you leave they will be lost";
}

【讨论】:

  • 必须有某种方式以编程方式处理此问题。
  • 您可以尝试捕获链接、表单提交等,并在显示您的自定义 UI 之前阻止导航,但没有什么可以阻止用户关闭窗口。我发现跨浏览器的唯一可靠事件是这个,但它非常有限,唉
  • 实际上...不确定这是否是一个解决方案,因为我还没有在精神上经历过,但是从here 窃取最终代码 sn-p 并将其粘贴在控制台中确实做到了防止onbeforeunload 弹出窗口触发。
  • 但这会阻止页面导航吗?你真的只是想阻止消息出现吗?
  • 我正在构建的是一个允许对 chrome 进行 total 语音控制的扩展。我需要能够以编程方式处理所有弹出窗口,包括这个,因为扩展的目的是防止用户需要按下任何键。所以我需要能够将消息呈现给用户,让他们通过语音而不是鼠标或键盘来处理它,这涉及到一些重新配置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-04
  • 1970-01-01
  • 2020-07-17
  • 1970-01-01
  • 1970-01-01
  • 2016-10-15
  • 2011-09-29
相关资源
最近更新 更多