Angularjs 如何在Cordova InApp Browser中添加自定义错误页或隐藏错误url?

Angularjs 如何在Cordova InApp Browser中添加自定义错误页或隐藏错误url?,angularjs,cordova,plugins,ionic-framework,inappbrowser,Angularjs,Cordova,Plugins,Ionic Framework,Inappbrowser,我正在用InAppBrowser插件构建一个离子安卓应用程序。当internet连接不可用时,插件会显示网页不可用和请求url 请帮助我自定义InAppBrowser错误页面(404页)。或者帮助我隐藏请求url的 谢谢。我想我第一次误解了你的问题,很抱歉。我在读你的问题,我在弄清楚发生了什么。您需要在config.xml添加自定义配置,以便在Cordova检测到错误时重定向到错误页面。我希望这能解决你的问题 <preference name="ErrorUrl" value="myErr

我正在用InAppBrowser插件构建一个离子安卓应用程序。当internet连接不可用时,插件会显示
网页不可用
请求url

请帮助我自定义InAppBrowser错误页面(404页)。或者帮助我隐藏请求url的


谢谢。

我想我第一次误解了你的问题,很抱歉。我在读你的问题,我在弄清楚发生了什么。您需要在
config.xml
添加自定义配置,以便在Cordova检测到错误时重定向到错误页面。我希望这能解决你的问题

<preference name="ErrorUrl" value="myErrorPage.html"/>

当部件不工作时,我执行以下步骤

  • 离子态重置

  • 离子平台移除android

  • 离子平台移除ios

  • 离子平台添加android

  • 离子平台添加ios

并尝试使用ionicPlatform ready

<button class="button button-balanced" ng-click="OpenBrowser()">Test</button>

我正在使用Ionic 4,无法使基于config.xml编辑的解决方案正常工作:

首选项name=“ErrorUrl”value=“myErrorPage.html”/

在loaderror上放置addEventListener也不起作用。看起来它不是由http错误触发的,插件需要修复

但我们发现了一个更简单的黑客

在loadstop上,我们等待500毫秒,然后通过使用和window.location.href触发executeScript来获取加载的url

如果加载的url是自定义错误页面的url,则在Cordova(而不是IAB)中,我们会显示一条带有后退按钮的自定义消息


这是一个黑客程序,但它涵盖了目前的需求

我刚刚遇到了同样的问题,下面是我所做的。该代码适用于Android,也适用于IOS。但是您需要删除
navigator.app.exitApp()适用于IOS,因为苹果不允许应用程序在未按下home(主页)按钮的情况下退出

让我知道这是否适合你。它将隐藏默认错误页面并打开自定义错误页面。在myerrorpage.html中编写自己的错误代码

document.getElementById("openBrowser").addEventListener("click", openBrowser);

document.addEventListener("offline", onOffline, false);

function onOffline(e) {
    e.preventDefault();
    var src = 'myErrorPage.html';
    var target = '_blank';
    var option = "loaction=no, toolbar=no, zoom=no, hidden=yes, hardwareback=no";
    var ref = cordova.InAppBrowser.open(src, target, option);
    alert('Your device is Offline. Please check your connection and try again.');
    navigator.app.exitApp();

}

function openBrowser() {
    var url = 'https://www.yourlink.com';
    var target = '_self';
    var options = "location=no,toolbar=no,zoom=no, hardwareback=no, hidden=yes" ;
    var ref = cordova.InAppBrowser.open(url, target, options);

}

我无法在安卓系统的爱奥尼亚4中设置ErrorUrl来管理解决方案

最后,我想出了另一个解决方案——隐藏默认错误页面并将用户重定向到任何页面(我使用event.url中的最后一个页面)

改变背景和重定向是很棘手的——从我的实验来看,使用injectCss是行不通的,因为主体是同时生成的。使用DOMContentLoader使其变黑并清除屏幕上的文本。 但重定向在DOMContentLoader中不起作用(不要问我为什么),所以您需要使用load事件


当用户重新使用硬件并返回POST请求时,它非常有效-这样他将被重定向到相同的url(但您可以使用任何您想要的url)。

您好,谢谢您的重播,我在哪里找到或添加此代码请解释谢谢,尝试在
config.xml
文件中添加ErrorUrl首选项,如我在答案中所示,并显示结果。Thanksi在config.xml中添加了,并在www文件夹中创建了“error.html”,但不起作用。Thanksi获得错误的流程是什么?你点击链接了吗?或者在Angle view中使用inapp浏览器插件B?安装inapp浏览器插件并使用ng单击链接,例如:$scope.login=function(){$cordovoauth.facebook()我有这个问题,我正在从配置导航到我的中指定的网页,如果它不可用,我想显示一个自定义错误页并隐藏链接。我不想使用inappbrowser。你是如何解决这个问题的?
    $scope.OpenBrowser = undefined;
    $ionicPlatform.ready(function () {
        $scope.OpenBrowser = function () {
            $cordovaInAppBrowser.open('http://ngcordova.com', '_blank', options)
                .then(function (event) {
                })
                .catch(function (event) {
                    $scope.Error = event;
                });
        };
    });
document.getElementById("openBrowser").addEventListener("click", openBrowser);

document.addEventListener("offline", onOffline, false);

function onOffline(e) {
    e.preventDefault();
    var src = 'myErrorPage.html';
    var target = '_blank';
    var option = "loaction=no, toolbar=no, zoom=no, hidden=yes, hardwareback=no";
    var ref = cordova.InAppBrowser.open(src, target, option);
    alert('Your device is Offline. Please check your connection and try again.');
    navigator.app.exitApp();

}

function openBrowser() {
    var url = 'https://www.yourlink.com';
    var target = '_self';
    var options = "location=no,toolbar=no,zoom=no, hardwareback=no, hidden=yes" ;
    var ref = cordova.InAppBrowser.open(url, target, options);

}
constructor(private iab: InAppBrowser) {
}

private openUrl(url: string)
{
    this.platform.ready().then(() => {
        if (this.platform.is('cordova')) {
            this.openBrowser(url);
        }
    });
}

private openBrowser(url: string): InAppBrowserObject
{
    const options: InAppBrowserOptions = {
        location: 'no',
        zoom: 'no',
        hidden: 'no'
    };

    const browser = this.iab.create(url, '_blank', options);

    browser.on('loaderror').subscribe(
        event => this.onLoadError(event, browser)
    );

    return browser;
}

private onLoadError(event: InAppBrowserEvent, browser: InAppBrowserObject): void
{
    browser.executeScript({
            code: `
                window.addEventListener('DOMContentLoaded', function () {
                    document.querySelector('body').style.background = 'black';
                    document.querySelector('body').innerHTML = '';
                }, true);

                window.addEventListener('load', function () {
                    window.location.replace('${event.url}');
                }, true);                    
            `,
        }
    ).then();
}