"Cannot read property 'addEventListener' of undefined" 使用 Ionic2 InAppBrowser

"Cannot read property 'addEventListener' of undefined" using Ionic2 InAppBrowser

我正在使用 InAppBrowser from ionic-native 打开系统浏览器 window 并观察要加载的特定回调 URL。这是我的代码片段:

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();
            }
        });
    }
}

一旦 register() 函数被触发,浏览器 window 打开预期的页面,但同时在打开它的页面上,我收到以下错误:

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)

堆栈跟踪中还有更多内容,但很明显问题出在 inappbrowserionic-native 包装器中。

这是一个错误,还是我遗漏了什么?这是我的系统信息,我正在使用 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

谢谢!

想通了!!!

问题出在传递给 new InAppBrowser() 函数的参数中。

这个有效

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

有效:

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

我一直在关注 this documentation,经过大量谷歌搜索和阅读关于 inappbrowser 的随机线程后,我终于找到了解决方案。本质上,这两者都会打开浏览器 window。但是,不正确的方法不允许您将事件侦听器附加到任何浏览器事件,例如加载开始。