android - 在 inappbrowser Phonegap webview 应用程序顶部显示自定义导航

标签 android html ios cordova phonegap

我通过 Phonegap 应用程序的 inappbrowser 插件加载网页。 该应用程序显示了一个网站和一个网上商店,两者都可以通过网络访问。 我无法添加“返回应用程序”按钮(从 PC 访问该网站时这没有意义)。所以我想要在phonegap应用程序中自定义导航(我更喜欢 Bootstrap ),这样我就可以在多个不同的网站之间导航。

不幸的是,导航被 inappbrowser 隐藏了。有没有办法在 inappbrowser 顶部显示应用程序 html 导航?

非常感谢!

使用 css 添加绝对位置、z-index 999999 和显示 block 没有帮助

最佳答案

实现此目的的一种方法是通过在 Cordova 应用程序 Webview 中生成按钮将按钮注入(inject)到您的网页中:

var inAppBrowserRef = cordova.InAppBrowser.open("http://www.mypage.com", "_blank");

inAppBrowserRef.addEventListener('loadstop', function(e) {
    inAppBrowserRef.executeScript({ 
        code: '\
            var body = document.querySelector("body");\
            var button = document.createElement("div");\
            button.innerHTML = "Return to app";\
            button.classList.add("close_button");\
            button.onclick = function() {\
                webkit.messageHandlers.cordova_iab.postMessage(JSON.stringify({action: "closeIAB"}));\
            };\
            body.appendChild(button);\
        '
    });
});

然后,您可以为单击关闭 inappbrowser 的按钮时发布的消息添加监听器:

inAppBrowserRef.addEventListener("message", function (params){
    if(params.data.action === "closeIAB"){
        inAppBrowserRef.close();
    }
});

您还可以从 Cordova 应用程序中注入(inject)按钮的样式:

inAppBrowserRef.insertCSS({
    "code": "\
        .close_button {\
            position: fixed;\
            bottom: 0;\
            z-index: 500;\
            width: 100%;\
            background: white;\
            color: black;\
            padding: 10px;\
            font-size: 20px;\
        }"
});

或者,如果您愿意,可以将按钮样式添加到网页的 CSS 中(如果它在您的控制之下)。

同样,如果您不喜欢动态创建按钮 HTML 的想法,您可以将其包含在网页中,但默认情况下隐藏它,除非应用程序注入(inject)了特定的类:

inAppBrowserRef.addEventListener('loadstop', function(e) {
    inAppBrowserRef.executeScript({ 
        code: '\
            var body = document.querySelector("body");\
            body.classList.add("is_app");\
        '
    });
});

在您的网站 CSS 中:

body:not(.is_app) .close_button{
    display: none;
}

请注意 postMessage API 的仿真已添加到 cordova-plugin-inappbrowser适用于 Android 和 iOS this PR尚未进入latest release version on npm (v3.0.0),因此您需要直接从 Github master 分支 (v3.1.0-dev) 安装该插件:

cordova plugin add https://github.com/apache/cordova-plugin-inappbrowser

关于android - 在 inappbrowser Phonegap webview 应用程序顶部显示自定义导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56557948/

相关文章:

javascript - 表单字段显示

javascript - 如何使用 javascript 获取下拉菜单列表中项目的值?

javascript - 内部带有 html 的 cordova iframe 未在 iOS 设备上显示

java - getGlobalVisibleRect() 究竟是什么?

Android:未找到 SSLContext SSL 实现

php - 路由分页链接的问题

ios - 如何在从 uiimagepicker 捕获图像后自定义图像

c# - Android 到 Web 服务。未传递的值

android - 缩小移动网页时出现额外空间,Galaxy S5

ios - UITableView 在添加从网络返回的新单元格时滚动不连贯