[英]prompt user on backspace and browser backbutton in gwt
从一个班级导航到另一个创建的历史记录时,我有两个班级。 现在,我想通过确认用户是否要离开页面来提示用户。直到现在,我尝试在gwt
使用Window.closingHandler()
,但不适用于退格按钮和浏览器后退按钮,仅在关闭时有效整个浏览器或使用交叉的特定页面。 它也在重新加载。
我也尝试过Javascript,使用onbeforeunload()
可以完美地工作。
这是我使用的代码。
JAVASCRIPT:
window.onbeforeunload = function () {
return "Are you sure you wish to leave this delightful page?";
}
还有gwt中的其他代码:
Window.addWindowClosingHandler(new Window.ClosingHandler() {
public void onWindowClosing(ClosingEvent event) {
event.setMessage("Do you wanna close?");
System.out.println("Closing...");
}
});
我希望在gwt
完成它。
您是否尝试过使用History.addValueChangeHandler
侦听浏览器的历史记录堆栈中的更改?
-编辑-
下面的代码对于Firefox
, Chrome
和IE9
Backspace key
正常工作。
注意:请同时对其他浏览器进行测试,如果有任何问题,请通知我。
Event.addNativePreviewHandler(new Event.NativePreviewHandler() {
@Override
public void onPreviewNativeEvent(final NativePreviewEvent event) {
boolean isFirefox = checkBrowser("Firefox");
if ((isFirefox && event.getTypeInt() == Event.ONKEYPRESS)
|| (!isFirefox && event.getTypeInt() == Event.ONKEYDOWN)) {
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_BACKSPACE) {
Element element = Element.as(event.getNativeEvent().getEventTarget());
String tagName = element.getTagName();
System.out.println(tagName);
if (!tagName.equalsIgnoreCase("INPUT")
&& !tagName.equalsIgnoreCase("TEXTAREA")) {
boolean result = Window.confirm("Are you sure?");
if (!result) {
event.cancel();
}
}
}
}
}
});
if (checkBrowser("Firefox")) {
DOM.sinkEvents(RootPanel.get().getElement(), Event.ONKEYPRESS);
} else {
DOM.sinkEvents(RootPanel.get().getElement(), Event.ONKEYDOWN);
}
....
private static boolean checkBrowser(String browserName) {
return (Window.Navigator.getUserAgent().toLowerCase().indexOf(browserName.toLowerCase()) != -1);
}
-编辑-
这也是代码检测浏览器的“后退”按钮。 欲了解更多信息,请看
public native void onBeforeUnload()/*-{
$wnd.onbeforeunload = function(e) {
return 'Are you sure?';
};
}-*/;
public void onModuleLoad() {
onBeforeUnload();
}
屏幕截图(单击浏览器后退按钮或刷新页面)
请看以下帖子:
我已经在JSNI中找到了它,但是在浏览器后退按钮中也无法正常工作。
public native void call()/*-{
$wnd.onkeypress = GetChar;
function GetChar (event)
{
var key = event.keyCode;
var bb = event.target.nodeName;
if(key==8 && bb=="BODY")
{
var x= window.confirm("Are you sureyou want to leave the page");
if (x==true)
{
window.history.back();
}
else if(x==false)
{
return false;
}
}
}
}-*/;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.