如何以编程方式触发科尔多瓦的后退按钮事件

Posted

技术标签:

【中文标题】如何以编程方式触发科尔多瓦的后退按钮事件【英文标题】:How to trigger cordova's backbutton event programatically 【发布时间】:2016-06-16 08:51:21 【问题描述】:

我正在开发一个基于 jQuery mobile 的 phonegap 应用程序。 我正在尝试在我的应用程序中放置一个按钮,其行为类似于 android 设备上的后退按钮。我不只想要一个history.back(),但我想要完全相同的行为,这意味着当没有附加处理程序时返回,并在一个附加到事件backbutton 时执行处理程序。

换句话说,我想在软件中模拟硬件后退按钮(完全相同的行为)

我已经尝试了这些代码,但没有成功:

$("#backbtn").click(function()
    var backButtonEvent = document.createEvent('Events');
    backButtonEvent.initEvent('backbutton', false, false);
    document.dispatchEvent(backButtonEvent);
);

我能做什么?

【问题讨论】:

查看此链接...***.com/questions/9631933/… @Banik 这与我的问题无关 您必须以编程方式触发本机方法...刚刚发布了答案试试这个... 【参考方案1】:
document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady()
    var backButtonElement = document.getElementById("backbtn");
    backButtonElement .addEventListener("click", buttonCallBack, false);


function buttonCallBack()
    document.addEventListener("backbutton", onBackButton, false);

function onBackButton()
   // write your stuff

试试上面的代码就行了

【讨论】:

我认为你误解了这个问题 对不起,我误解了你的问题,我没有研究清楚【参考方案2】:

在mainActivity类中导入javascriptinterface包

import android.webkit.JavascriptInterface;

在 MainActivity 类的 onCreate 方法中添加 JavaScript 接口

super.appView.addJavascriptInterface(new JSInterface(), "sampleproj");

然后定义javascript接口

public class JSInterface
       @JavascriptInterface
       public void dispachBackKey() 
            dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
            dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK));
       

现在在 javascript 中调用原生方法

window.sampleproj.dispachBackKey();

【讨论】:

我已经尝试了您的解决方案,并进行了一些修改。首先,我也必须导入android.view.KeyEvent。其次,我必须使用(WebView)appView.getEngine().getView() 而不是super.appView。最后,当我执行sampleproj.dispachBackKey()is JS时,我得到了一些错误:Uncaught Error: Java exception was raised during method invocation at Error (native) at <anonymous>:2:13 at Object.InjectedScript._evaluateOn (<anonymous>:895:140) at Object.InjectedScript._evaluateAndWrap (<anonymous>:828:34) at Object.InjectedScript.evaluate (<anonymous>:694:21)

以上是关于如何以编程方式触发科尔多瓦的后退按钮事件的主要内容,如果未能解决你的问题,请参考以下文章

对于以编程方式创建的 UIButton,有时不会触发按钮单击事件

以编程方式触发控件的事件

如何以编程方式将触摸事件伪造为 UIButton?

如何检测浏览器后退按钮事件 - 跨浏览器

如果提交以编程方式启动,则提交事件不会触发

如何以编程方式在 ExtJS 4 中触发 keydown 事件