如何为rhomobile / rhodes webview设置cookie

时间:2011-06-02 21:45:11

标签: ruby cookies webview rhodes

我正在使用rhomobile / rhodes应用程序与Web服务交谈并在WebView中显示内容,当我使用登录详细信息和回调发送Rho :: AsyncHttp.post中的登录信息时,我可以看到成功登录Web服务,应用程序获取我可以放置和查看的cookie。到目前为止一切顺利。

然而,接下来我尝试使用该cookie来验证WebView,所以在回调中:

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

但是这会将我重定向到登录页面。发送的cookie与@params['cookies']中的cookie不匹配,是否有不同的方法为IP地址设置cookie?或者我做错了什么,或者此刻在罗得岛被打破了?我为android和iphone尝试了3.0.0和3.0.1,他们有相同的行为。

2 个答案:

答案 0 :(得分:2)

结果表明WebView.set_cookie目前不适用于3.0.1,但是你可以在javascript中设置cookie ...这是我最终解决的hack似乎有效:

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。

答案 1 :(得分: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