2017-04-02 4 views
3

네트워크가 연결되어 있지만 인터넷이 작동하지 않는 경우. 예 wifi 연결이 있지만 wifi가 브라우저에서 관찰 할 수있는 것보다 인터넷에 연결되어 있지 않으면 "loaderror"이벤트가 발생합니다.ionic2 InAppBrowser (이온 네이티브) loaderror가 작동하지 않습니다.

코드 :

import { Component } from '@angular/core'; 
import { Platform,AlertController,LoadingController } from 'ionic-angular'; 
import { StatusBar } from '@ionic-native/status-bar'; 
import { SplashScreen } from '@ionic-native/splash-screen'; 
import { Network } from '@ionic-native/network'; 
import { HomePage } from '../pages/home/home'; 
import { InAppBrowser } from '@ionic-native/in-app-browser'; 


@Component({ 
    templateUrl: 'app.html' 
}) 
export class MyApp { 
    public rootPage:any = HomePage; 

    constructor(private platform: Platform,private statusBar: StatusBar,private splashScreen: SplashScreen, private network: Network, private alertCtrl: AlertController, private iab: InAppBrowser, private loadingCtrl: LoadingController) { 

platform.ready().then(() => { 
    // Okay, so the platform is ready and our plugins are available. 
    // Here you can do any higher level native things you might need. 

    let alert = this.alertCtrl.create({ 
      title: "Network Problem", 
      subTitle: 'Internet is not connected' , 
      buttons: [ 
       { 
        text: 'Close', handler:() => { 
         this.platform.exitApp(); 
        } 
       } 
      ] 
     }); 
     const loading = this.loadingCtrl.create(); 
     if(this.network.type !== 'none') { 
      loading.present(); 
      const browser = this.iab.create('http://www.google.com','_blank','location=no,clearsessioncache=yes'); 
      browser.on("loaderror").subscribe(() => { 
       loading.dismiss(); 
       this.iab.create('http://192.168.2.222/users/dashboard','_blank','location=no,clearsesioncache=yes'); 
      }); 
      const sub = browser.on('loadstart').subscribe(() => { 
       loading.dismiss(); 
       sub.unsubscribe(); 
      }, 
       err => { loading.dismiss(); console.log('error') ; alert.present()}, 
       () => { loading.dismiss(); console.log('success') }); 
     }     

     /// check connectivity automatically . 

     let connectSubscription = network.onConnect().subscribe(() => { 
       loading.present(); 
       const browser = this.iab.create('http://www.google.com','_blank','location=no,clearsesioncache=yes'); 
       browser.on("loaderror").subscribe(() => { 
        loading.dismiss(); 
        this.iab.create('http://192.168.2.222/users/dashboard','_blank','location=no,clearsesioncache=yes'); 
       }); 
     }); 
     let disconnectSubscription = network.onDisconnect().subscribe(() => { 
       const browser = this.iab.create("error.html",'_blank','location=no');  
     }); 

    statusBar.styleDefault(); 
    splashScreen.hide(); 
    }); 
} 
} 

그러나 항상도 항상로드 얻을 clearsessioncache 및 인터넷 연결 해제 후, 구글의 페이지를로드합니다. 나는이 두 가지를 모두 안드로이드와 데스크톱에서 테스트했다.

+0

URL에 문제가있을 때 어떤 현상이 발생 했습니까? – Sampath

+0

아무 것도 흰색 페이지를 표시하지 않고 거기에만 표시됩니다. –

+0

로드 오류 오류 코드에서 코드를 변경하고 10 초 후에로드됩니다. 내 응용 프로그램을 시작할 때 10 초가 걸리고 loaderror가 발생하면 다시 10 초가 걸리므로 총 20이됩니다. –

답변

2

다음과 같이 시도 할 수 있습니다.

참고 : 따라서 다음과 같이 loader을 사용해야하는 특정 지연이 있습니다.

goToWebPage() { 
    const loading = this.loadingCtrl.create();//use loader 
    loading.present(); 
    const browser = this.iab.create('http://www.google.com'); 
    const sub = browser.on('loadstart').subscribe(() => { 
     loading.dismiss(); 
     sub.unsubscribe(); 
    }, 
     err => { loading.dismiss();console.log('error'); }, 
    () => { loading.dismiss();console.log('success') }); 
    } 
+0

'if (this.network.type! =='none ') { \t \t \t \t const loading = this.loadingCtrl.create(); \t \t \t \t loading.present(); \t \t \t \t const browser = this.iab.create ('http : //www.google.com','_blank','location=no, clearsessioncache = yes'); \t \t \t \t \t \t CONST 서브 browser.on = ('에 Loadstart') ((등록) => { \t \t \t \t \t loading.dismiss(). \t \t \t \t \t sub.unsubscribe() ; \t \t \t \t} \t \t \t \t \t ERR => { console.log ('오류'); }, \t \t \t \t \t() => {console.log ('success')}); \t \t \t} '** 페이지를로드 한 후에도 콘솔에 SUCCESS 메시지가 표시되지 않고 오류가 발생했습니다. ** –

+0

은 내가 제공 한 코드 스 니펫을 정확하게 사용합니다. 완벽하게 작동합니다. – Sampath

+0

그것은 작동하지만 위에 언급 한 것처럼 너무 많은 시간이 걸립니다. –