【问题标题】:Detect use of Android back button using JavaScript使用 JavaScript 检测 Android 后退按钮的使用
【发布时间】:2013-12-20 20:23:58
【问题描述】:

我的网站有面包屑,可以突出显示用户已到达的流程中的哪个阶段。面包屑依靠浏览器历史记录来判断使用浏览器后退按钮时应该突出显示哪个阶段,但在使用硬件后退按钮的 Android 设备上,这似乎被绕过了,突出显示的面包屑不会改变。

我的网站没有使用 PhoneGap 或任何类似的东西,因为它通常不是移动网站,所以是否可以捕获 Android 后退按钮的使用,以便我可以添加一个事件来根据历史日志设置面包屑突出显示时按钮用了,只用JavaScript还是jQuery?

【问题讨论】:

  • 请展示你到目前为止所做的尝试。
  • 我什么都没试过。我只想知道是否可以捕获设备后退按钮,如果可以,该怎么做。我不知道有什么可以尝试的,因为我不知道它是否可以被 javascript 访问。
  • 谢谢,但这不是安卓应用,它只是一个网站,所以我正在寻找一种不使用 Java 来检测后退按钮的方法。
  • 浏览器会捕捉到android后退按钮事件并触发popstate。但是我们不知道是不是所有的popstate事件都来自android的后退按钮,或者浏览器中也有一个后退按钮。

标签: javascript android


【解决方案1】:

您可以在活动的onBackPressed方法内部进行检查,并在调用super.onBackPressed();之前触发该方法调用javascript方法。

例如:

override fun onBackPressed() {
    if (handleBackPress) {
        myWebView.loadUrl("javascript:backButtonPressed()")
    }else {
        super.onBackPressed()
    }
}

在上面的例子中,如果 handleBackPress 布尔变量为真,那么它将尝试在 webview 中调用 javascript 文件的 backButtonPressed() 方法。

如果您需要任何解释或帮助,请告诉我。

【讨论】:

  • 不错,+1,但这里的fun 是什么?
  • 代码是 kotlin 语言.. 这意味着它是一个函数
  • 在java中你可以这样写,“public void onBackPressed()” .. :)
  • 哦。我对科特林一无所知。谢谢。
  • @RahulKhurana 我们没有使用 Java/Android,这只是一个使用 JavaScript 的移动网站
【解决方案2】:

1.使用popstate 事件。

https://developer.mozilla.org/en-US/docs/Web/Events/popstate

window.onpopstate = function(e) { 
   updateBreadCrumbObservable();
};

2。使用onhashchange 事件。

window.onhashchange = function(e) {
   updateBreadCrumbObservable();
}

您可以使用 event 参数来获取有关触发事件的更多描述。

【讨论】:

  • 谢谢@Navjot Ahuja,我已经测试过了,这两个事件都会在页面的每次导航中启动,但是,我怎么知道用户是启动它还是它是android后退按钮?亲切的问候
  • 我比较了所有的事件属性,它们都具有相同的值:(
  • 为什么需要为硬件和浏览器后退按钮设置单独的行为?从技术上讲,它们对用户的行为方式应该相同。在这种情况下,@NavjotAhuja 给出的答案可以正常工作。
  • 抱歉,我的信息可能不清楚。我的意思是我怎么知道用户是否点击了一个按钮(页面中的每个导航都会启动这两个功能)或者用户是否按下了 Android 中的返回最后一页/后退按钮。再次感谢和抱歉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-19
  • 1970-01-01
  • 2017-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多