1

我正在为 Android 制作一个 Phonegap 应用程序。该应用程序应使用 CAS 身份验证。目前我有一个位于此地址的页面:“www.mysite.com”,该页面会自动重定向到 CAS 服务器身份验证页面。当我登录该页面时,CAS 将我重定向到我来自的页面,在本例中为“www.mysite.com”。

登录后,我可以显示刚刚使用 CAS PHP 库登录的用户名和内置的函数。

问题:当我在 Phonegap 应用程序的 Childbrowser 实例中打开 www.mysite.com 时,在这个“循环”之后,我能否以某种方式将信息从 mysite.com 传输到我的应用程序,在这种情况下是用户名?

理想的情况是:打开应用程序并按下登录按钮,Childbrowser 弹出并登录,Phonegap 应用程序接收用户名,Childbrowser 关闭。

欢迎任何提示,在此先感谢!

4

3 回答 3

1

可能最容易使用查询字符串。让您的登录页面更新其 url 并onLocationChangechildBrowser. 检查是否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事件将在 Childbrowser 上打开的页面的整个 HTML 源发送回父应用程序(您的 Phonegap 应用程序)。因此,您可以从网页中提取所需的任何数据。源代码在这里,有一个例子。

于 2012-07-13T04:08:37.517 回答