Javascript 将页面从Iframe更改为主窗口
我在一个iframe内工作,当我完成工作时,我想在主窗口中更改页面(不是在iframe内),而是在这个iframe的外侧。Javascript 将页面从Iframe更改为主窗口,javascript,asp.net,.net,vb.net,iframe,Javascript,Asp.net,.net,Vb.net,Iframe,我在一个iframe内工作,当我完成工作时,我想在主窗口中更改页面(不是在iframe内),而是在这个iframe的外侧。 为此,我使用以下子项: Public Sub ChangePage(sender As Object, e As EventArgs) Dim myNewAsp As New AspNetSqlProvider Dim dbHandler As New DBHandler Dim srvHandler As New Serve
为此,我使用以下子项:
Public Sub ChangePage(sender As Object, e As EventArgs)
Dim myNewAsp As New AspNetSqlProvider
Dim dbHandler As New DBHandler
Dim srvHandler As New ServerHandler
Dim aspProvider As New MyAspNetSqlMembershipProvider
Dim errAnswer As New Register
Dim assit As New Assistance
Dim currentUser As MembershipUser = Nothing
Dim message As String = Nothing
Dim msg As String = Nothing
Try
Dim url As String = "/Pages/Account/Login.aspx"
Dim postWindow As Object ' "/Pages/Account/Assistance.aspx"
Dim startWindow As Object ' "/Pages/Support/Asp/Help01.aspx"
Dim urlURI As String = HttpContext.Current.Request.Url.AbsoluteUri
Dim urlPath As String = HttpContext.Current.Request.Url.AbsolutePath
Dim myServerName As String = Strings.Left(urlURI, urlURI.Length - urlPath.Length)
url = myServerName + url
startWindow = Me.GetType().FullName
postWindow = Assistance.PageUrlType
msg = "Hellow World"
'msg = "<script type='text/javascript'> $(document).ready(function(){ window.location.href='" + url + "'; }); </script>"
Dim script As Type = Me.Page.GetType() ' Assistance.PageType.BaseType
Dim postmsg As String = "ChangePage('" & startWindow & "', '" & postWindow & "', '" & msg & "')"
If Not Page.ClientScript.IsStartupScriptRegistered(Me.GetType(), "sendMessage") Then
Page.ClientScript.RegisterStartupScript(script, "sendMessage", postmsg)
End If
Catch eq As SqlException
srvHandler.ErrorAnswer = DBHandler.GetError(1, Nothing, Nothing, eq, Nothing)
srvHandler.ErrorAnswer = srvHandler.ErrorAnswer & "\r\n Asp.SQLProvider.ResetPassword "
ServerHandler._InnerError += srvHandler.ErrorAnswer
Register.errorCall = True
Return
Catch Ex As Exception
srvHandler.ErrorAnswer = DBHandler.GetError(3, Ex, Nothing, Nothing, Nothing)
srvHandler.ErrorAnswer = srvHandler.ErrorAnswer & "\r\n Asp.SQLProvider.ResetPassword"
ServerHandler._InnerError += srvHandler.ErrorAnswer
Register.errorCall = True
Return
End Try
End Sub
在我要更改的页面(父页面)中,我还使用以下脚本:
window.addEventListener(“消息”,receiveMessage,false);
函数接收消息(事件){
event.origin!==消息;
event.source.postMessage(“'”+message+“'”,event.origin);
返回;
}
我从上面得到的是将所需页面(示例中的消息)放在框架内。Help01.aspx页面中的纸条执行得很好。但是在这个窗口中,而不是在父窗口中(Assistance,aspx)
因此,我无法跳出iFrame(在表中)。
有人知道该怎么办吗 我想你需要像这里这样的东西。这取决于您需要支持的浏览器,但支持非常好。这将允许您在主窗口和iFrame之间进行“对话” 该链接将指导您如何设置它,但其要点是您需要将事件侦听器附加到主窗口,然后将消息从iFrame发布到外部窗口。然后,当消息传入时,在外部窗口中执行重定向
因此,如果您有
Dim msg As String…
您希望它是一些将消息发布到外部框架的代码。类似于window.postMessage(..)
亲爱的@Zero21xxx,经过长时间的等待。。。在代码中做一些其他事情,我开始处理您的提案。我真的不知道怎么做。。。我的意思是我不知道如何实现这个解决方案的代码。我读了很多关于它的东西,但我不知道该怎么办。。。有没有可能给我任何帮助?
<script type="text/javascript">
function ChangePage(startPage, sendPage, message) {
var sPage = document.getElementById(startPage);
sPage.contentWindow.postMessage(message, sendPage);
}
</script>
<script type="text/javascript">
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event) {
event.origin !== message;
event.source.postMessage("'" + message + "'", event.origin);
return;
}