a.html
<form name="form1" method="post" action="">
<a href="javascript:void(null)" class="add" onClick="open('b.html','','resizable=1,scrollbars=1,status=no,toolbar=no,menu= no,width=500,height=400,left=150,top=50')">增加</a>
<input type="text" name="text1">
</form>
b.html
<script language="Javascript" type="text/javascript">
function returnValue()
{
window.opener.document.all.text1.value=document.getElementById("returnText").value;
window.close();
}
</script>
<input type="button" name="Submit" value="提交" onclick="returnValue();">
<input name="returnText" type="text" id="returnText">
</p>
補充:window.opener 的用法
window.opener 的用法在一般的用法中,只是用來解決關閉窗口時不提示彈出窗口, 而對它更深層的了解一般比較少。其實window.opener是指呼叫window.open方法的視窗。
在工作中主要是用來解決部分提交的。這種跨頁操作對工作是非常有幫助的。
如果你在主視窗開啟了一個頁面,並且希望主視窗刷新就用這個,開啟頁面的window.opener就相當於主視窗的window。
主視窗的刷新你可以用
window.opener.location.reload();
如果你用虛擬的目錄:如struts的*.do會提示你重試你可以改成這樣window.opener.yourformname.submit()
就好了
2〉
在應用上有這樣一個情況,
在A窗口中開啟B窗口,在B窗口中操作完以後關閉B窗口,同時自動刷新A窗口
function closeWin(){
hasClosed = true;
window.opener.location="javascript:reloadPage();";
window.close();
}
function window.onbeforeunload(){
if(!hasClosed){
window.opener.location="javascript:reloadPage();";
}
}
</script>
上面的程式碼在關閉B視窗的時候會提示錯誤,說缺少Object,正確的程式碼如下:
function closeWin(){
hasClosed = true;
window.opener.location="javascript:reloadPage();";
window.opener=null;
window.close();
}
function window.onbeforeunload(){
if(!hasClosed){//如果已經執行了closeWin方法,則不執行本方法
window.opener.location="javascript:reloadPage();";
}
}
</script>
reloadPage方法如下:
function reloadPage() {
history.go(0);
document.execCommand("refresh")
document.location = document.location;
document.location.reload();
}
PS:由於需要支援正常關閉和強制關閉視窗時能捕捉到事件,所以用了全域變數hasClosed
==============================================
補充,在父視窗是frame的時候在刷新父視窗的時候會出現問題:
The page cannot be refreshed without resending the information.
後修改如下:
window.opener.parent.document.frames.item('mainFrame').location.href = window.opener.location.href;
不需要執行自備的reload()方法,注意,不要再畫蛇添足加上這一句:
window.opener.parent.document.frames.item('mainFrame').location.reload();
================================================== ========================================
最後,為了同時支援刷新普通父窗口和frame父窗口,程式碼如下:
function closeWin() {
hasClosed = true;
<%if(null != frame){%>
window.opener.parent.document.frames.item('mainFrame').location.href = window.opener.location.href;
<%}else{%>
window.opener.location = "javascript:reloadPage();";
<%}%>
//window.opener.top.mainFrame.location="javascript:reloadPage();";
//self.opener.frames.mainFrame.location.reload(true);
window.opener = null;
window.close();
}
function window.onbeforeunload(){
if (!hasClosed) {
<%if(null != frame){%>
window.opener.parent.document.frames.item('mainFrame').location.href = window.opener.location.href;
<%}else{%>
window.opener.location = "javascript:reloadPage();";
<%}%>
window.opener = null;
}
}
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 試試看這個:)
frame框架裡的頁面要改其他同框架下的頁面或父框架的頁面就用parent
window.opener引用的是window.open開啟的頁面的父親頁面。
window.frames物件可以引用iframe裡的頁面,也可以引用frameset裡的頁面.
可以這樣
window.frames[0].document.getElementById('xx');
可以這樣
window.frames[0].document.body.innerHTML;
frm = window.parent.window.frames['uploadFrame'];
frmDocument = frm.document;
frm.sb(3); //sb 是uploadFrame頁面裡的函數
對於Firefox
如果你遇到報錯:parent.document.frames has no PRoperties
換為如下程式碼就可以了,這個程式碼IE,ff相容. frm = window.parent.window.frames['uploadFrame'];其實frames 集合並不是掛在document 而是掛在window 物件下.
注意這樣修改frame裡的頁面有限制,就是必須是同域下的,否則無法存取如果是同一域下,但是子網域不同,那麼涉及到的js,html檔都加上一句。
document.domain = xxx.com [這裡填入你的網域]
document.getElementById('iframeid').contentWindow.document.getElementById('someelementid');
問:
在父視窗window.open()一個子視窗。並定義一個變數i。
在子視窗輸入一個值j然後window.opener.i=j;
這樣能傳過去。但我在子視窗最後加了個window.close();就無法傳值了。
請問是否有辦法解決這個問題。使我傳遞值之後再關閉子視窗。
程式碼如下:
父親視窗:parent.jsp
<script>
var i;
window.open('<%=contextPath%>/usermanage/newscontrol/cd.jsp);
</script>
<input type="button" onclick="alert(i)">
子視窗:cd.jsp
<script>
function subm(){
window.opener.i=5;
window.close();
}
</script>
<input type="button" onclick="subm()">
最佳答案你可以在父視窗放一個
<input id="fromChild" type="hidden" />
<input type="button"
onclick="alert(document.getElementById('fromChild').value)">
在子視窗中:
function subm(){
window.opener.document.getElementById('fromChild').value=5;
window.close();
}
這樣既可
<head>
<script language=javascript>
function windowclose()
{ window.opener=null;
window.close();
}
</script>
</head>
<body>
<input id="Button1" type="button" value="button" onclick="windowclose()" />
</body>
-