Пустой iframe с firefox 62

После выпуска Firefox 62 у меня возникла любопытная ошибка с моим iframe.

Я использую Iframe, чтобы отображать сообщения об ошибках или информацию для пользователя в моем приложении Webforms, но теперь каждый Iframe пуст. Iframe отображается, но нет содержимого.

Вот как я их построил:

Public Sub ShowHint_JS(ByVal pv_strMessage As String, ByVal pv_strEvent As String)

        Dim objMessage As New CMessage
        Dim objUtilities As New CCommonFunctions(Request.ServerVariables("SCRIPT_NAME"))

        AddJavaScript("$('form').append('" & objMessage.buildMessage(objUtilities.GetStruktur() & "common/Message.aspx", pv_strMessage, 0, 0, 0, 0, pv_strEvent, "") & "');", "HW_JS")
End Sub

Public Sub AddJavaScript(ByVal pv_strJavaScript As String, ByVal pv_strBlockName As String)

        ScriptManager.RegisterStartupScript(Me.Page, GetType(String), pv_strBlockName, "$(document).ready(function(){" & pv_strJavaScript & "});", True)
End Sub

// В моем классе CMessage:

public string buildMessage(string pv_strMessage, string pv_strEvent)
        {
            Session["MESSAGEEVENT"] = pv_strEvent;

            return convertHtmlControlToString(buildMessageIFrame("common/Message.aspx", 80, 200, 400, 260, pv_strMessage));
        }

private HtmlGenericControl buildMessageIFrame(string pv_strURL, int pv_intTop, int pv_intLeft, int pv_intWidth, 
                                                        int pv_intHeight, string pv_strMessage)
        {
            HtmlGenericControl objIframe = new HtmlGenericControl("iframe");

            if (!pv_strURL.Contains("?"))
            {
                pv_strURL += "?";
            }
            else
            {
                if(!pv_strURL.EndsWith("&"))
                {
                    pv_strURL += "&";
                }
            }

            Session["DIVCount"] = (m_objObjHandl.NZ_Int(Session["DIVCount"], 0) + 1);
            Session["Message_ifrm" + m_objObjHandl.NZ_Str(Session["DIVCount"], "")] = pv_strMessage;

            objIframe.ID = "ifrm" + Session["DIVCount"].ToString();
            objIframe.Attributes.Add("class", "iFrameHint invisible");
            objIframe.Attributes.Add("frameborder", "0");
            objIframe.Attributes.Add("scrolling", "no");
            objIframe.Attributes.Add("src", pv_strURL + "height=" + pv_intHeight.ToString() + "&iframe=" + objIframe.ID.ToString());
            objIframe.Attributes.CssStyle.Add("top", pv_intTop.ToString() + "px");
            objIframe.Attributes.CssStyle.Add("left", pv_intLeft.ToString() + "px");
            objIframe.Attributes.CssStyle.Add("width", pv_intWidth.ToString() + "px");
            objIframe.Attributes.CssStyle.Add("height", pv_intHeight.ToString() + "px");

            return objIframe;
        }

Вот мой Message.aspx, который должен отображаться в iFrame

<%@ Page Language="VB" MasterPageFile="~/common/MasterMessage.master" %>

<asp:Content ID="cntHead" runat="server" ContentPlaceHolderID="cphHead">

    <script type="text/javascript">

        function buildWindow(pv_strUrl) {
            var arrUrl = pv_strUrl.split('#');

            if (arrUrl.length = 1) {
                createWindow(arrUrl[0]);
            }

            if (arrUrl.length = 2) {
                createWindow(arrUrl[0], arrUrl[1]);
            }

            if (arrUrl.length = 3) {
                createWindow(arrUrl[0], arrUrl[1], arrUrl[2]);
            }

            if (arrUrl.length > 3) {
                createWindow(arrUrl[0], arrUrl[1], arrUrl[2], arrUrl[3]);
            }
        }

        function redirectParent(pv_strAddress) {
            var objParent = parent.document;

            objParent.location.href = pv_strAddress;
        }
    </script>

</asp:Content>
<asp:Content ID="cntMessage" runat="server" ContentPlaceHolderID="cphBody">
    <table class="tblMessage">
        <tr class="tdHintHeader">
            <td style="width: 97%;">
                Message</td>
            <td id="tdClose">
                <img alt="Close" src="../img/cross.gif" class="FunctionImg" /></td>
        </tr>
        <tr class="OuterTable">
            <td colspan="2" style="padding: 10px; background-color: #D0E0FF;" class="hint top center">
                <div id="divContent" class="divMessageContent"><span>
                    <%Response.Write.NZ_Str(Session("MESSAGE_" & NZ_Str(Request.QueryString("iframe")))).Replace(vbCrLf, "<br />").Replace(vbNewLine, "<br />").Replace(vbCr, "<br />"))%>
                    </span>
                </div>
            </td>
        </tr>
        <tr class="OuterTable">
            <td class="center" colspan="2" style="height: 30px;">
                <input type="button" value="OK" class="button" style="width: 100px;" onclick="<%= HttpUtility.HtmlDecode(Request.QueryString("event")) %>;closeMe();" /></td>
        </tr>
    </table>
</asp:Content>

Решение:

Изменил свойство из моего CSS-класса для div с моим контентом из

overflow: auto;

к

overflow: visible;

Ошибки консоли?

mplungjan 10.09.2018 11:07

нет ошибок консоли

R. Kut 10.09.2018 11:10
1
2
136
1

Ответы 1

Это могло быть вызвано отсутствием Контент-Безопасность-Политика.

Чтобы этого избежать, попробуйте добавить в файл web.config следующее:

<system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <httpProtocol>
      <customHeaders>
        <add name="Content-Security-Policy" value="frame-ancestors 'self';"/>
      </customHeaders>
    </httpProtocol>
  </system.webServer>

Надеюсь, вы найдете это полезным.

Спасибо, но я решил проблему. У одного из моих <div> был класс css с переполнением: auto; Я переключил его на переполнение: видимое.

R. Kut 13.09.2018 13:43

Другие вопросы по теме