WP7 WebBrowser的页面重定向(在Flickr上)问题

时间:2011-09-20 11:46:05

标签: c# windows-phone-7 oauth flickr

我在WP7 Mango WebBrowser控件中使用Flickr进行OAuth身份验证过程时遇到了一些困难。 例如,“Google”登录后,浏览器会重定向到以下页面:

<html xmlns="http://www.w3.org/1999/xhtml">
<head></head>
<body dir="" onload="document.forms['f'].submit();">
  <form id="f" method="POST" name="f" action="https://open.login.yahoo.com/openid/yrp/return_to?sid=0cbf1840b0b13c261235">
  <input name="openid.ns" value="http://specs.openid.net/auth/2.0" type="hidden">
  <input name="openid.mode" value="id_res" type="hidden">
  <input name="openid.op_endpoint" value="https://www.google.com/accounts/o8/ud" type="hidden">
  <input name="openid.response_nonce" value="2011-09-14T10:16:07Zsdv-LClYH0A" type="hidden">
  <input name="openid.return_to" value="https://open.login.yahoo.com/openid/yrp/return_to?sid=e7578b76a72f0c261235" type="hidden">
  <input name="openid.assoc_handle" value="AOQobUfPBfylWt9AYvILwR347CMGMjh2j4b5jlHe175juowtl05" type="hidden">
  <input name="openid.signed" value="op_endpoint,claimed_id,identity,return_to,response_nonce,assoc_handle,ns.ext1,ns.ext2,ext1.mode,ext1.type.fn,ext1.value.fn,ext1.type.gid,ext1.value.gid,ext1.type.em,ext1.value.em,ext1.type.lg,ext1.value.lg,ext1.type.ln,ext1.value.ln,ext2.auth_time,ext2.auth_policies" type="hidden">
  <input name="openid.sig" value="e5HFSrO0P+yeRJstJHGJlROUkDvVIDGU=" type="hidden">
  <input name="openid.identity" value="https://www.google.com/accounts/o8/id?id=AItOawlmDnO3Bct_YhZlwXpAsU" type="hidden">
  <input name="openid.claimed_id" value="https://www.google.com/accounts/o8/id?id=AItOawnO3Bct_YhZlVBwXpAsU" type="hidden">
  <input name="openid.ns.ext1" value="http://openid.net/srv/ax/1.0" type="hidden">
  <input name="openid.ext1.mode" value="fetch_response" type="hidden">
  <input name="openid.ext1.type.fn" value="http://axschema.org/namePerson/first" type="hidden">
  <input name="openid.ext1.value.fn" value="John" type="hidden">
  <input name="openid.ext1.type.gid" value="http://www.google.com/accounts/api/federated-login/id" type="hidden">
  <input name="openid.ext1.value.gid" value="837487387483142978" type="hidden">
  <input name="openid.ext1.type.em" value="http://axschema.org/contact/email" type="hidden">
  <input name="openid.ext1.value.em" value="john.doe@gmail.com" type="hidden">
  <input name="openid.ext1.type.lg" value="http://axschema.org/pref/language" type="hidden">
  <input name="openid.ext1.value.lg" value="en-US" type="hidden">
  <input name="openid.ext1.type.ln" value="http://axschema.org/namePerson/last" type="hidden">
  <input name="openid.ext1.value.ln" value="Doe" type="hidden">
  <input name="openid.ns.ext2" value="http://specs.openid.net/extensions/pape/1.0" type="hidden">
  <input name="openid.ext2.auth_time" value="1970-01-01T00:21:55Z" type="hidden">
  <input name="openid.ext2.auth_policies" value="http://schemas.openid.net/pape/policies/2007/06/none" type="hidden">
  <input name="openid.ns.ext3" value="http://specs.openid.net/extensions/ui/1.0" type="hidden">
  <input name="openid.ext3.mode" value="popup" type="hidden">
  <noscript><input value="Continue to open.login.yahoo.com" type="submit"></noscript>
  </form>
</body>
</html>

当浏览器加载页面时,我只看到一个非常小的按钮,其中包含文本“Continue to open.login.yahoo.com”,在我看来这不是用户友好的。 现在你们可能会认为我没有用IsScriptEnabled =“True”进行测试。使用IsScriptEnabled =“True”时,它只是隐藏按钮并显示空白页。

我还尝试使用InvokeScript方法运行document.forms ['f']。submit(),但我只是在应用程序中收到了一个COM异常。

请帮忙!任何提示或建议?

1 个答案:

答案 0 :(得分:1)

我一直在解决这个问题,但似乎在WebBrowser控件中做了一些更改。

我只是激活IsScriptEnabled =“True”,它似乎触发了表单帖子。然而在此之前,我尝试了一些似乎有用的其他方法,其中一个是:

loginBrowser.InvokeScript("eval", "document.forms[0].submit()");

然而,我遇到了最后一个重定向问题。获取以下内容,我想我们获得了我们需要的签名和链接,以便为我们的Flickr帐户授权应用程序(以下链接已缩短且无法使用)。

GET /signin/yahoo/?redir=%2Fservices%2Fauth%2F%3Fmobile%3D6%26api_key%3D40d26ecdfghDhr4a1f62219c68d989df%26perms%3Dwrite%26api_sig%3Dcda4de52d6eca8e6db565cf8cd52e1f4&.data=Lnlp......

解决方案如下:

private void loginBrowser_Navigating(object sender, NavigatingEventArgs e)
        {
            if (e.Uri.ToString().Contains("http://www.flickr.com/signin/yahoo/?redir=/services/auth/?mobile=1") && _ishit == false)
            {
                _ishit = true;
                e.Cancel = true;

            }
        }

我希望这有助于某人!