java android中的cordova InApp浏览器隐藏/显示

oiopk7p5  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(399)

**赏金两天后到期。回答此问题可获得+100声望奖励。Nomam正在寻找一个可靠来源的答案。

我正在使用cordova和android的inappbrowser插件
https://github.com/apache/cordova-plugin-inappbrowser
我试图在java文件中控制android的硬件后退按钮
inappbrowserdialog.java文件

public void onBackPressed() {
    if (this.inAppBrowser == null) {
        this.dismiss();
    } else {
        if (this.inAppBrowser.hardwareBack() && this.inAppBrowser.canGoBack()) {
            // this.inAppBrowser.goBack();
        } else {
            // this.inAppBrowser.closeDialog();
        }
    }
}

我不希望它“goback”或“closedialog”,我希望它“hide”,就像您可以在cordova javascript端调用它一样
https://github.com/apache/cordova-plugin-inappbrowser#inappbrowserhide

ref.hide();

隐藏是理想的,这样我可以调用。显示,如果我想不加载整个页面,这是会发生什么,如果我只是关闭它。
我正在寻找一个java命令,例如

this.inAppBrowser.hide();

但我好像找不到。
更新
因此,链接到codrova.hide javascript的java代码在这里
https://github.com/apache/cordova-plugin-inappbrowser/blob/8bdbd18d1619e25cf8bdedadf6448ef40b21ea7c/src/android/inappbrowser.java#l329-l341级

else if (action.equals("hide")) {
        this.cordova.getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (dialog != null && !cordova.getActivity().isFinishing()) {
                    dialog.hide();
                }
            }
        });
        PluginResult pluginResult = new PluginResult(PluginResult.Status.OK);
        pluginResult.setKeepCallback(true);
        this.callbackContext.sendPluginResult(pluginResult);
    }

我就是不知道如何从java back按钮函数调用这个java函数。

72qzrwbm

72qzrwbm1#

我看了源代码,确认插件没有暴露 dialog 阻止您直接与之交互的成员。一种方法是通过反射将其暴露出来,但这对我来说似乎有点刻薄。
您可以通过调用 execute 在插件上。为了避免出现任何意外问题,我们需要提供 CordovaArgs 以及 CallbackContext 示例。 CordovaArgs 很容易伪造,但是 CallbackContext 不应与实际的webview交互并尝试调用js。所以我创建了一个 Package 器,当调用它时它什么也不做:

class FakeCallbackContext extends CallbackContext {

    public FakeCallbackContext() {
        this(null, null);
    }

    @Override
    public void sendPluginResult(PluginResult pluginResult) {
        // Do not send an actual result to the webview
        // Perhaps just log the result
    }
}

然后,为了从代码中调用这些方法,可以如下调用execute。我是这么想的 this.inAppBrowser 是的示例 InAppBrowser :

void hideDialog() {
    CordovaArgs args = new CordovaArgs(new JSONArray());
    this.browser.execute("hide", args, new FakeCallbackContext());
}

void showDialog() {
    CordovaArgs args = new CordovaArgs(new JSONArray());
    this.browser.execute("show", args, new FakeCallbackContext());
}

相关问题