IE (6 и 7) Параметры строки запроса iFrame, установленные на странице .NET MVC, не работают, выглядят раздетыми, но отображаются в исходном коде на источнике страницы - PullRequest
0 голосов
/ 19 марта 2009

Мы используем .NET MVC и пытаемся динамически (через контроллер) установить URL-адрес iFrame. Это работало нормально на FireFox и Chrome, но не Ie. Т.е. только в первом случае сайт позволяет пользователю правильно войти в систему. Сайты v10 и v9 этого не делают. Все сайты используют для входа параметры строки запроса. Их источник выглядит следующим образом (неудачный источник в IE) - без видимой разницы.

  • Кроме того, мы опробовали весь параметр безопасности IE7 Enabled для навигации по фрейму в другом домене - это не было проблемой; это все еще не работает. Также не работает на IE6. Те же результаты, что и на скриншотах ниже.

  • Также не работает Html-кодирование (не показано, но попыталось).

Любые идеи были бы такими классными!

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1"><title>

</title>
<style type="text/css">
        td  {
              font-family: Arial;
              font-size: small;
        }
  </style>
</head>
<body>
<form action="/Account/Navigate" method="post">
    <table style="align: right; width: 100%;">
        <tr>
            <td align="right">
                <input type="submit" name="butSubmit" value="WN" />&nbsp;

                    <input type="submit" name="butSubmit" value="MyDg" />

                    <input type="submit" name="butSubmit" value="V9" />

             </td>
        </tr>
    </table>

        <iframe id="displayFrame" src="http://my.totallyinsecuretopostthis.com/Login.aspx?&uname=sdavis&pword=04ab" style="width: 100%; height: 95%;"></iframe>
    </form>
</body>
</html>

успешный источник в IE7:

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1"><title>

</title>
<style type="text/css">
            td  {
                    font-family: Arial;
                    font-size: small;
            }
    </style>
</head>
<body>
<form action="/Account/Navigate" method="post">
    <table style="align: right; width: 100%;">
        <tr>
            <td align="right">
                <input type="submit" name="butSubmit" value="WN" />

                    <input type="submit" name="butSubmit" value="MyDg" />

                    <input type="submit" name="butSubmit" value="V9" />

             </td>
        </tr>
    </table>

        <iframe id="displayFrame" src="http://www.totallyinsecuretopostthis.com/users/428/login/700bc1c8d837f30fdbc03cfc03b58c02" style="width: 100%; height: 95%;"></iframe>
    </form>
</body>
</html>

Фрагмент кода (сначала View, затем Controller):

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<SingleSignOnUser>" %>
<%@ Import Namespace="Wingnut.Data.Model"%>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title></title>
<style type="text/css">
    td  {
        font-family: Arial;
        font-size: small;
    }
</style>
</head>
<body>
<% using (Html.BeginForm("Navigate", "Account", FormMethod.Post)) { %>
    <% TempData["username"] = Model.WingnutUserEmail; %>
    <% TempData["password"] = Model.PasswordHash; %>
    <table style="align: right; width: 100%;">
        <tr>
            <td align="right">
                <!-- always display this, but when click, make sure you are authenticated; else, prompt for correct 
                 wingnut password -->
                <input type="submit" name="butSubmit" value="WN" />&nbsp;
                <% if (Model.IsV10User()) { %>
                    <input type="submit" name="butSubmit" value="MyDg" />
                <% } %>
                <% if (Model.IsV9User()) { %>
                    <input type="submit" name="butSubmit" value="V9" />
                <% } %>
             </td>
        </tr>
    </table>
    <% string url = ViewData["iFrameURL"].ToString(); %>
    <% if (ViewData["iFrameURL"].ToString() != "popup") { %>
        <iframe id="displayFrame" src="<%=ViewData["iFrameURL"]%>" style="width: 100%; height: 95%;"></iframe>
    <% } %>

(теперь код контроллера:)

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Navigate(string butSubmit) {
    _service = new SSOUserService();
    SingleSignOnUser wnUser = _service.GetValidUser(TempData["username"].ToString(), TempData["password"].ToString());

    ViewData["iFrameURL"] = "http://www.usatoday.com";

    try {
        //if you are supposed to bypass the intersect page...
        if (wnUser != null) {
            switch (butSubmit) {
                case "WN":
                    if (wnUser.IsWingnutUser())
                        ViewData["iFrameURL"] = string.Format("http://www.totallyinsecuretopostthis.com/users/{0}/login/{1}", wnUser.WingnutId, wnUser.WingnutToken);
                    else {
                        // do popup to capture this person's correct, but uncaptured, Wingnut password
                        // try to authenticate, if can, save, and proceed
                        // else, give error message / popup finally
                        ViewData["iFrameURL"] = "popup";
                        ViewData["popupText"] = "Oops. During the Totallyinsecuretopostthis's recent Single Sign On effort, we require that you enter your Totallyinsecuretopostthis" +
                            "password for us here one time only for authentication to SomePlace:";
                    }
                    break;

                case "MyDg":
                    if (wnUser.IsV10User()) {
                        ViewData["iFrameURL"] =
                            string.Format(@"http://my.totallyinsecuretopostthisv10.com/Login.aspx?&uname={0}&pword={1}",
                                          wnUser.V10UserCredentials.LoginName,
                                          wnUser.V10UserCredentials.Password);
                    }
                    break;

                case "V9":
                    if (wnUser.IsV9User()) {
                        ViewData["iFrameURL"] =
                            string.Format(
                                @"https://login.totallyinsecuretopostthisv9.com/clients/OtherPages/ExternalSignIn.aspx?UserName={0}&Password={1}",
                                wnUser.V9UserCredentials.LoginName, wnUser.V9UserCredentials.Password);
                    }
                    break;
            }
        }
    }

    catch (Exception ex) {
        ModelState.AddModelError("Errors", ex.Message);
    }

    return View("Navigation", wnUser);
}

Ответы [ 3 ]

1 голос
/ 26 марта 2009

Наконец-то я нашел хак / разрешение - я никогда не заставлял iFrame src = "mystring" работать, но я создал хак. B / c сайт, к которому мы пытаемся перейти, у нас есть; поэтому на этом сайте мы создали «зеркальную» страницу. Страницы выглядят одинаково

1 - моя оригинальная страница с iFrame, но у меня нет HREF, и когда вы нажимаете, чтобы перейти туда, где я изначально хотел ...

2 - вы попали на эту страницу входа и вошли в систему ... но я добавил параметры строки запроса на эту страницу входа (у нас также есть этот сайт), и если sso = true, и вы прошли аутентификацию, вы будете перенаправлены на ...

3 - страница на сайте B с рамкой, которая выглядит идентично странице на шаге 1.

Это взлом, и много работы, но он "работает" и является лучшим для пользовательского опыта, который мы могли бы в конечном итоге создать.

*** Спасибо вам, ребята, которые предоставили ответы, а также всем, кто ищет. Я очень ценю помощь!

0 голосов
/ 21 марта 2009

Это не связано с "? &" В начале строки запроса?

Попробуйте просто: http://my.totallyinsecuretopostthis.com/Login.aspx?uname=sdavis&pword=04ab

0 голосов
/ 19 марта 2009

Используйте HttpUtility.HtmlAttributeEncode для кодирования амперсанда в URL:

ViewData["iFrameUrl"] = HttpUtility.HtmlAttributeEncode( string.Format( ... ) );

Я бы предложил сделать это при рендеринге тега <a> в виде вместо жесткого кодирования в контроллере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...