1

Android用のPhonegapアプリを作成しています。アプリはCAS認証を使用する必要があります。現在、「www.mysite.com」というアドレスにあるページがあり、そのページは自動的にCASサーバー認証ページにリダイレクトされます。そのページにログインすると、CASは元のページ(この場合は「www.mysite.com」)にリダイレクトします。

ログイン後、CASPHPライブラリでログインしたばかりのユーザーの名前とそこに組み込まれている関数を表示できます。

質問:PhonegapアプリのChildbrowserインスタンスでwww.mysite.comを開くと、この「ループ」の後で、mysite.comからアプリ(この場合はユーザー名)に情報を転送できますか?

理想的なシナリオは次のとおりです。アプリを開いてログインボタンを押すと、Childbrowserがポップアップしてログインし、Phonegapアプリがユーザー名を受け取り、Childbrowserが閉じます。

事前に感謝します、どんなヒントも大歓迎です!

4

3 に答える 3

1

クエリ文字列を使用するのが最も簡単かもしれません。ログインページにURLを更新してもらい、でonLocationChangeイベントをキャプチャしchildBrowserます。そこにあるかどうかを確認し、ある場合usernameはそれをつかみます。

ログインページで、呼び出しが完了すると、次のようになります。

window.history.replaceState( '', '', window.location.pathname + '?username=' + username );

次に、アプリで:

window.plugins.childBrowser.onLocationChange = function ( url ) {
    if ( url.indexOf( 'username' ) > -1 ) {
        var username = window.location.queryString()['username'];
    };
};

クエリ文字列を取得するためのヘルパー関数は次のとおりです。

window.location.queryString = function () {
    var result = {},
        queryString = location.search.substring( 1 ),
        re = /([^&=]+)=([^&]*)/g,
        m;
    while ( m = re.exec( queryString ) ) {
        if ( typeof result[decodeURIComponent( m[1] )] == 'undefined' ) {
            result[decodeURIComponent( m[1] )] = decodeURIComponent( m[2] );
        } else {
            if ( typeof result[decodeURIComponent( m[1] )] == 'string' ) {
                result[decodeURIComponent( m[1] )] = [result[decodeURIComponent( m[1] )]];
            };
            result[decodeURIComponent( m[1] )].push( decodeURIComponent( m[2] ) )
        };
    };
    return result;
};
于 2012-07-15T03:51:24.287 に答える
0

このアプローチを使用して、サンプルアプリケーションで機能させました。

function onBodyLoad()
{
    document.addEventListener("deviceready", onDeviceReady,false);
}

function onDeviceReady(){
    showLogin();
}

function showLogin() {
    try{
        var cb = ChildBrowser.install();
        if(cb != null)
        {
            cb.onLocationChange = function(loc){ 
                console.log("browser location changed to " + loc);

                if(loc == "http://mydomain.com/app"){
                    cb.close();
                    doOtherStuff();
                }
            };

            window.plugins.childBrowser.showWebPage("http://mydomain.com/login");
        }
    }catch(e){
        console.log(e);
    }
}

function checkAuth(){
    if( $.cookie(".ASPXAUTH") == null){
        console.log("No auth cookie found");
    }else{
        console.log("Auth cookie found");
    }
}
于 2012-07-11T12:21:14.827 に答える
0

この種の目的のために、Childbrowser(Android)のカスタムバージョンを作成しました(元々はGoogle oAuth2用)。onPageLoadedチャイルドブラウザで開いたページのHTMLソース全体を親アプリ(Phonegapアプリ)に送り返すイベントがあります。したがって、Webページから必要なデータを抽出できます。ソースコードはここにあり、例があります。

于 2012-07-13T04:08:37.517 に答える