Angularjs 如何在Cordova InApp Browser中添加自定义错误页或隐藏错误url?
我正在用InAppBrowser插件构建一个离子安卓应用程序。当internet连接不可用时,插件会显示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
网页不可用
和请求url
请帮助我自定义InAppBrowser错误页面(404页)。或者帮助我隐藏请求url的
谢谢。我想我第一次误解了你的问题,很抱歉。我在读你的问题,我在弄清楚发生了什么。您需要在
config.xml
添加自定义配置,以便在Cordova检测到错误时重定向到错误页面。我希望这能解决你的问题
<preference name="ErrorUrl" value="myErrorPage.html"/>
当部件不工作时,我执行以下步骤
- 离子态重置
- 离子平台移除android
- 离子平台移除ios
- 离子平台添加android
- 离子平台添加ios
<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();
}