自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属性溢出:自动;
到
溢出:可见;
答案 0 :(得分:0)
这可能是由于缺少 Content-Security-Policy 。
为避免这种情况,请尝试将以下内容添加到您的 web.config 文件中:
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<httpProtocol>
<customHeaders>
<add name="Content-Security-Policy" value="frame-ancestors 'self';"/>
</customHeaders>
</httpProtocol>
</system.webServer>
希望您会发现这很有用。