2017-01-24 2 views
1

J'utilise InAppBrowser de ionic-native pour ouvrir une fenêtre de navigateur système et rechercher une URL de rappel particulière à charger. Voici un extrait de mon code:"Impossible de lire la propriété 'addEventListener' de undefined" à l'aide de Ionic2 InAppBrowser

import { Component } from '@angular/core'; 
import { NavController, NavParams } from 'ionic-angular'; 
import { InAppBrowser, InAppBrowserEvent } from 'ionic-native'; 

@Component({/* ... properties ... */}) 
export class MyPage { 

    /* ... constructor, etc. ... */ 

    // function triggered by button click on the page 
    register() { 
     let url = 'https://example.com/oauth2/authorize?client_id=29D20X'; 
     let browser: InAppBrowser = new InAppBrowser(url, '_system'); 
     browser.on('loadstart').subscribe((ev: InAppBrowserEvent) => { // line 23 
      if (0 === ev.url.indexOf('http://localhost:8100/callback')) { 
       console.log(ev.url); 
       browser.close(); 
      } 
     }); 
    } 
} 

Dès que la fonction register() est déclenchée, la fenêtre du navigateur s'ouvre la page attendue, mais en attendant sur la page à partir de laquelle il a été ouvert, je reçois l'erreur suivante:

TypeError: Cannot read property 'addEventListener' of undefined 
    at Observable._subscribe (inappbrowser.js:79) 
    at Observable.subscribe (Observable.js:56) 
    at MyPage.register (my-page.ts:23) 

il y a plus après que la trace de la pile, mais il est assez clair que le problème est dans l'emballage ionic-native pour inappbrowser.

Est-ce un bug ou manque-t-il quelque chose? Voici mes informations système, et je suis en train de tester cela dans un navigateur en utilisant ionic serve.

Cordova CLI: 6.4.0 
Ionic Framework Version: 2.0.0-rc.5 
Ionic CLI Version: 2.2.1 
Ionic App Lib Version: 2.2.0 
Ionic App Scripts Version: 1.0.0 
ios-deploy version: 1.8.2 
ios-sim version: 5.0.3 
OS: OS X Yosemite 
Node Version: v7.0.0 
Xcode version: Xcode 7.2.1 Build version 7C1002 

Merci!

Répondre

1

Compris!

Le problème était dans les paramètres transmis à la fonction new InAppBrowser().

Ce fonctionne:

let browser = new InAppBrowser(url, '_blank', 'location=yes'); 

Cela ne PAS travail:

let browser = new InAppBrowser(url, '_system'); 

je suivais this documentation et après beaucoup de googler et la lecture à travers les discussions au hasard sur les inappbrowser, je me suis finalement trouvé la solution. Essentiellement, les deux ouvriront une fenêtre de navigateur. Toutefois, la méthode incorrecte ne vous permettra pas d'attacher un écouteur d'événement à l'un des événements du navigateur, par exemple. loadstart.