1

私は、iframeを介して複数のサードパーティのWebサイトで使用するように設計されたASP.netMVCに組み込まれた多数のフォームを含むシステムを持っています。各サードパーティサイトには一意のURLが割り当てられます。

http://iframedomain.com/iframe/f9a14f53-0528-4ad1-b451-8895360e57e4

コントローラは、GUIDが有効であるかどうか、およびそれに割り当てられたカスタムcssファイルへのパスがあるかどうかを確認します。存在する場合、このカスタムcssはSession変数に格納されます-cssファイルはすべて、iframeがホストされているドメインのコンテンツ/スタイル内のサブフォルダーに存在します。次に、ユーザーは正しいフォームにリダイレクトされます。

各フォームコントローラーは、共通のコントローラーを継承します。このコントローラー内で、OnActionExecutingにオーバーライドがあり、カスタムcssがVIewBagに渡されます。

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (Session["iFrameCSS"] != null)
        {
            ViewBag.iFrameCSS = Session["iFrameCSS"];
        }

        if (Session["JQueryTheme"] != null)
        {
            ViewBag.JQueryTheme = Session["JQueryTheme"];
        }

        base.OnActionExecuting(filterContext);
    }

次に、レイアウトファイルはこれをチェックし、正しいCSSファイルをインポートします。

@if (ViewBag.iFrameCSS != null)
{
    string cssFile = ViewBag.iFrameCSS.ToString();
    if (cssFile.StartsWith("http", StringComparison.CurrentCultureIgnoreCase))
    {
        <link rel="stylesheet" href="@cssFile" type="text/css" media="screen, projection" />
    }
    else
    {
        <link rel="stylesheet" href="@Url.Content("~/Content/style/" + cssFile + ".css")" type="text/css" media="screen, projection" />
    }
}
else
{
    <link rel="stylesheet" href="no-custom-css-file.css" type="text/css" media="screen, projection" />
}

これはすべて、CSSファイルへのリンクが存在せずデフォルトのcssファイルが使用されるIE(7/8/9でテスト済み)を除くすべてのブラウザーで正常に機能します。ローカルでデバッグしたところ、セッションが正常に機能し、ViewBag変数が確実に設定されているIEでさまざまな結果が表示されましたが、これはライブサーバーでは機能していません。ここで何が悪いのかわかりませんか?私は4台の異なるマシンでテストしました(セットアップが大きく異なる4人で、すべて同じ結果になります)

4

1 に答える 1

1

たぶん、これはクロスドメインセッションCookieの問題です。P3Pヘッダーを設定すると、問題が解決するはずです。SOのP3Pについてはたくさんの質問があります。

iframeが親とは異なるドメインにある場合、それらはサードパーティのCookieであり、InternetExplorerおよびSafariでデフォルトで設定するためのいくつかの制限があります。

マクロは、Cookieなしのセッションを使用して彼の問題を解決しました。

于 2012-05-28T16:46:18.150 に答える