2011-06-02 77 views
1

我使用rhomobile/rhodes应用程序与Web服务进行通信并在WebView中显示内容,当我在Rho :: AsyncHttp.post中发送登录信息时登录详细信息和回调,我可以看到Web服务上的成功登录,并且应用程序获取我可以放入和查看的cookie。到现在为止还挺好。如何为rhomobile/rhodes webview设置cookie

然而,接下来的事情我尝试是使用cookie来验证的WebView,所以在回调:

WebView.set_cookie("10.0.1.190", @params['cookies']) 
WebView.navigate("10.0.1.190") 

但我重定向到登录页面。发送的cookie与@params['cookies']中的cookie不匹配,是否有其他方法可以为ip地址设置Cookie?或者我做错了什么,或者此时罗得岛的这种情况已经破裂?我尝试3.0.0和3.0.1为Android和iPhone和他们有相同的行为。

回答

2

原来WebView.set_cookie目前不为3.0.1工作,但你可以设置Cookie在JavaScript ...这是黑客我结束了,似乎工作:

def login 
    WebView.navigate("http://www.mysite.com/blank.html") 
    Rho::AsyncHttp.post(
    :url => "http://www.mysite.com/login?user[username]=joeblow&user[password]=supersecret", 
    :callback => url_for(:action => :login_callback) 
) 
    render :action => :wait 
end 

def login_callback 
    WebView.execute_js("document.cookie='#{@params["cookies"]};expires=Fri, June 10 12:00:00 UTC;path=/;domain=.mysite.com'") 
    WebView.navigate("http://www.mysite.com") 
end 

blank.html只是一个空文件,用于在不设置任何cookie的情况下加载WebView。

2

这是什么为我工作,而不使用js。我想这可能是因为我添加了多个cookie,所以我最终在回调中一次添加了它们,而不是一次添加它们。

def login 
     WebView.navigate("http://www.mysite.com/blank.html") 
     Rho::AsyncHttp.post(
     :url => "http://www.mysite.com/login?user[username]=joeblow&user[password]=supersecret", 
     :callback => url_for(:action => :login_callback) 
    ) 
     render :action => :wait 
    end 



    def login_callback 

     cookies = @params["cookies"].split(';'); 

      cookie_str = "" 
       cookies.each do |c| 
        c = c + ';' 
        WebView.set_cookie("10.0.1.190", c) 
       end 
     WebView.navigate("http://www.mysite.com") 

    end