我是网页浏览的新手,并尝试使用它来创建应用。我有一个使用javascript显示的弹出窗口。它有一个关闭按钮。除了关闭按钮,我想使用本机后退按钮。
也就是说,如果用户点击后退按钮,我的弹出窗口应该关闭。
我的疑问是,它是否需要本机应用程序的任何更改?或者webview将后退按钮操作转换为webview可以理解的按键等事件?
答案 0 :(得分:2)
我不知道您是否拥有HTML5支持,但如果是这样,那么历史记录API中的history.pushState
和history.onpopstate
将完全符合您的要求。
当显示弹出窗口时,使用pushState
通知浏览器新的历史记录条目,就像弹出窗口是新页面一样。
然后向history.onpopstate
添加一个事件监听器,关闭弹出窗口,如果它已打开。
答案 1 :(得分:2)
您可以尝试混合一些问题及其解决方案:
拦截Android中的back button点击事件
Exec a js function(来自外部)
使用document.addEventListener
收听此活动,此处关闭对话框/提醒
答案 2 :(得分:1)
如果您使用Cordova,它会提供一个事件来跟踪Android设备上的后退按钮:
document.addEventListener("backbutton", yourCallbackFunction, false);
您可以覆盖此事件并实现自己的行为。除此之外,不应该有一种方法来跟踪后退按钮事件。
答案 3 :(得分:1)
单击后退按钮将关闭显示模态的viewcontroller。
我猜你不希望发生这种情况,只关闭javascript模式。
是的,您需要更改本机代码。
On native backbutton click,
if your modal is open:
close the modal
else:
do default backbutton action.
以下是详细说明。
On native backbutton click # your native code to intercept the back button
if your modal is open:
# there are multiple options here
# first strategy
# let javascript inform native side when it opens/closes popup
# native just needs to check the status he has
# second strategy
# native asks javascript if he has a modal open
# this is a bit tricky because native can't get a return value from javascript
# native asks javascript to tell native if he has a modal open (native->javascript + javasciprt -> native two function calls)
# native checks what javascript just said
close the modal
# this is easy, ask javascript to close it.
我认为你知道如何在javascript和amp;之间进行交流本机,如果不看看http://www.smashingmagazine.com/2013/10/best-of-both-worlds-mixing-html5-native-code/
答案 4 :(得分:1)
进一步帮助lifeisfoo
陈述的内容:
public class WebViewer
WebView webView;
@Override
public void onBackPressed() {
if (webView.hasPopUp()) {
webView.loadUrl("javascript:closePopUp()");
} else {
super.onBackPressed();
}
}