父窗口子窗口问题搜集[转]
[转至]http://blog.csdn.net/Thomas_Chen/archive/2007/08/07/1728925.aspx
根据iframe里页面的内容来控制父窗口iframe高度
在包含的IFrame页面里:
<TABLE WIDTH=75% BORDER=1 CELLSPACING=1 CELLPADDING=1>
<TR>
<TD>
<iframe id=zz src="a.asp" height=100% scrolling=no></iframe></TD>
</TR>
</TABLE>
在a.asp里加上这些代码:
<SCRIPT LANGUAGE=javascript>
<!--
window.onload=function(){
var ptd = window.parent.document.getElementById("zz");
ptd.style.height = document.body.scrollHeight;
}
//-->
</SCRIPT>
IFRAME内控制父窗口的另一个IFRAME
parent.window.frames['aaa'].document.getElementById("bbb").innerHTML="11111";
Javascript 中父窗口与子窗口的交互
Javascript:
-
<script type="text/javascript">
-
<!--
-
function openWindow()
-
{
-
newWindow = window.open('','newWindow','height=300,width=300,scrollbars=auto');
-
if (newWindow != null)
-
{
-
var windowHTML= "<html><head><title>preview</title></head>";
-
windowHTML += "<body><h1 align='center'>";
-
windowHTML += "这是子窗口!</h1><hr><div align='center'><form action='#' method='get'>";
-
windowHTML += "<input type='button' value='将父窗口的背景设为红色' onclick='window.opener.document.bgColor=\"red\";' /><br>";
-
windowHTML += "<br ><input type='button' value='关闭' onclick='self.close();' />";
-
windowHTML += "</form></div></body></html>";
-
-
newWindow.document.write(windowHTML);
-
newWindow.focus();
-
}
-
}
-
//-->
-
</script>
HTML:
-
<input value='打开子窗口' onclick="openWindow();" type="button">
-
<input type="button" value="将子窗口的背景设为蓝色" onclick="if (window.newWindow){newWindow.document.bgColor='blue';newWindow.focus();}" />
-
父窗口调用子窗口
父窗口与子窗口的数据传递问题
我权且把原始窗口叫父窗口,把从该窗口打开或弹出的窗口或对话框叫子窗口.当然打开子窗口可用window.open()或window.showModalDialog()[与window.showModelessDialog()类似].若想将父窗口的数据传递到子窗口可用URL后带请求字符串即"?id1=qurey1&id2=query2",在子窗口中用window.location.search来获取该请求字符串.再利用字符串分割便可获得数据.
下面通过例子来说一下,子窗口向父窗口传递数据.首先是使用window.open()方法打开的窗口.
主窗口中主要是
<scrīpt type="text/Javascrīpt"> |
这里主要有个window.open().它很简单,有三个主要参数,第一个是打开子窗口的URL;第二个是打开子窗口的名字,可选;第三个是设置大小,工具条等,可选.
子窗口中代码主要是
<scrīpt type="text/Javascrīpt"> <table width="300" height="26" border="0" align="center" cellpadding="0" cellspacing="0"> |
这里主要是window.parent.opener,parent获取对象层次中的父窗口;opener设置或获取创建当前窗口的窗口的引用.使用它就可以对父窗口进行传值.
第二种方法是使用弹出对话框来实现.父窗口的代码主要有:
<scrīpt type="text/Javascrīpt"> |
这里主要涉及window.showModalDialog()和window.showModelessDialog().二者的功能类似,都是打开指定的对话框,主要区别是:
showModalDialog:被打开后就会始终保持输入焦点。除非对话框被关闭,否则用户无法切换到主窗口。类似alert的运行效果。
showModelessDialog:被打开后,用户可以随机切换输入焦点。对主窗口没有任何影响.
注意为了省事,传递变量名时直接将"window"传递过去,即showModalDialog("URL",window,"")
而子窗口对话框代码主要是
<scrīpt type="text/Javascrīpt"> <table width="300" height="26" border="0" align="center" cellpadding="0" cellspacing="0"> |
你如果不想要对话框链接时不弹出新窗口就在<head />中添加<base target="_self">代码.这里传递数据用到了window.dialogArguments,它用来设置或获取传递给模式对话框窗口的变量或变量数组.
iframe_ID.iframe_document_object.object_attribute = attribute_value
例子
onClick="iframe_text.myH1.innerText='http://www.02dz.cn/';"
子窗口调用父窗口
parent.parent_document_object.object_attribute = attribute_value
例子
onclick="parent.myH1.innerText='http://www.02dz.cn/';"
上面在IE下没有问题,但在firefox下不正常。在firefox下,应该是
父窗口调用子窗口
window.frames["iframe_ID"].document.getElementById("iframe_document_object").object_attribute = attribute_value
例子
window.frames["iframe_text"].document.getElementById("myH1").innerHTML= "http://www.02dz.cn/";
子窗口调用父窗口
parent.document.getElementById("parent_document_object").object_attribute = attribute_value
例子
parent.document.getElementById("myH1").innerHTML = "http://www.02dz.cn/";
子窗口更改父窗口元素
父窗口
<SCRIPT language=javascript>
function PopupCatSel()
{
var selProdWnd=window.open("/member/tradeinfo/select_sort.asp","new","resizable=yes,width=580,height=320,top=0,scrollbars=yes");
if(selProdWnd.opener== null)
selProdWnd.opener = self;
return (false);
}
</SCRIPT>
子窗口
<SCRIPT LANGUAGE="JavaScript">
function retForm(sortid,type3id,sortname,typeid,typename1,type3name)
{
if (!opener) return true;
opener.document.forms[0].sortid.value = sortid;
if (!opener) return true;
opener.document.forms[0].typeid.value = typeid;
if (!opener) return true;
opener.document.forms[0].type3id.value = type3id;
if(opener.document.forms[0].cat_sel_name)
opener.document.forms[0].cat_sel_name.value = sortname+ " >> "+ typename1+ " >> "+ type3name;
opener.document.forms[0].cat_sel_name1.value = sortname+ " >> "+ typename1+ " >> "+ type3name;
self.close();
return false;
}
</SCRIPT>
关于window.opener的用法
window.opener 的用法
window.opener 返回的是创建当前窗口的那个窗口的引用,比如点击了a.htm上的一个链接而打开了b.htm,然后我们打算在b.htm上输入一个值然后赋予a.htm上的一个id为“name”的textbox中,就可以写为:
window.opener.document.getElementById("name").value = "输入的数据";
对于javascript中的window.opener没有很好的理解。
为什么框架中不能使用,弹出窗口的父窗口不能在框架里面的某个页面呢?那怎样通过弹出窗口操作框架中的父窗口呢?
opener.parent.frames['frameName'].document.all.input1.value 试试这个:)