javascript頁面重新整理和跳轉

zhyp29發表於2016-05-25
"window.location.href"、"location.href"是本頁面跳轉 "parent.location.href"是上一層頁面跳轉 "top.location.href"是最外層的頁面跳轉 舉例說明: 如果A,B,C,D都是jsp,D是C的iframe,C是B的iframe,B是A的iframe,如果D中js這樣寫 "window.location.href"、"location.href":D頁面跳轉 "parent.location.href":C頁面跳轉 "top.location.href":A頁面跳轉 如果D頁面中有form的話, <form>: form提交後D頁面跳轉 <form target="_blank">: form提交後彈出新頁面 <form target="_parent">: form提交後C頁面跳轉 <form target="_top"> : form提交後A頁面跳轉 關於頁面重新整理,D 頁面中這樣寫: "parent.location.reload();": C頁面重新整理 (當然,也可以使用子視窗的 opener 物件來獲得父視窗的物件:window.opener.document.location.reload(); ) "top.location.reload();": A頁面重新整理 轉自:http://hi.baidu.com/pannijingling/blog/item/d57f0ddd651360b3cd11660e.html

關於iframe連線跳轉及父與子,子與子之間的呼叫問題


 
1、網頁中如何實現點選iframe中的一個連結,使整個頁面(不是隻有iframe)跳轉到新的頁面?

答:在連結裡設定target="_parent
如:<a href="2.htm" target="_parent">123</a> 

2、一個iframe引用baidu的頁面,整個頁面都會被直接轉向到baidu的頁面,是如何實現的?

在被iframe的頁面上寫入
<script>
document.body.onload = function(){
   if(top != self)top.location = self.location;
}
</script> 

3、怎麼在父窗體form提交後在iframe顯示頁面?
<input type="radio" name="radiobutton" value="manuscript" onclick="javascript:this.form.action='a.php';this.form.target='iframe的name或ID';this.form.submit()"> 

4、A網頁連結到B網頁內iframe框架中的1_1.htm檔案,怎麼做?
<a href='1_1.htm' target="框架名">adsf</a>
 
父子頁面之間的呼叫關係
父:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>顯示圖表</title>
<script src="http://www.ablanxue.com/js/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
    var gg="dsafdsafdsafdsafsdaf";
    function ggMM() {
        alert("2222222222222222222222222222222");
    }
    function callIframeMethod() {
        //document.getElementById("ii").contentWindow.test();
        $("#ii")[0].contentWindow.test(); //用jquery呼叫需要加一個[0]
    }
    function callIframeField() {
        alert($("#ii")[0].contentWindow.ff);
    }
    function callIframeHtml() {
        alert($("#ii")[0].contentWindow.$("#dd").val());
        //alert($("#ii")[0].contentWindow.document.getElementById("dd").value);
        //alert($("#ii")[0].contentWindow.document.getElementById("dd").value);             
    }   
    function giveParameter() {
        $("#ii")[0].contentWindow.hellobaby="dsafdsafsdafsdafsdafsdafsadfsadfsdafsadfdsaffdsaaaaaaaaaaaaa";
    }
</script>
</head>
<body>
    <a href="#" onClick="giveParameter();">引數傳遞</a>
    <a href="#" onClick="callIframeMethod();">呼叫子iframe方法</a>
    <a href="#" onClick="callIframeField();">呼叫子iframe變數</a>
    <a href="#" onClick="callIframeHtml();">呼叫子iframe元件</a></br>  
    <iframe id="ii" src="iframe.html" width="100%" frameborder="0"></iframe>
    <iframe id="new" src="newIframe.html" width="100%" frameborder="0"></iframe>
</body>
</html>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>顯示圖表</title>
<script src="http://www.ablanxue.com/js/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
function callLevelFrame() {
    var ff=parent.$("#ii")[0].contentWindow.ff;
    alert(ff);
}
</script>
</head>
<body>
<a href="#" onClick="callLevelFrame();">呼叫兄弟iframe</a>   
<input id="nn" type="text" value="sdafsdfsa"/>
</body>
</html>

 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>顯示圖表</title>
<script src="http://www.ablanxue.com/js/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
var ff="adfdasfdsafdsafdsaf";
function test() {
    alert($("#dd").val());
}
function callMainField() {
    alert(parent.gg);
}
function callMainMethod() {
    parent.ggMM();
}
function callMainHtml() {
    alert(parent.$("#ii").attr("id"));
}
function getParameter() {
    alert(window.hellobaby);
}
</script>
</head>
<body>
    <a href="#" onClick="getParameter();">接受引數</a>
    <a href="#" onClick="callMainMethod();">呼叫子iframe方法</a>
    <a href="#" onClick="callMainField();">呼叫主視窗變數</a>
    <a href="#" onClick="callMainHtml();">呼叫子iframe元件</a>   
    <input id="dd" type="text" value="http://www.ablanxue.com123456"/>
</body>
</html>


JS iframe父子頁面元素呼叫方法 | window parent top opener 解釋

翻開那一頁 釋出於 3年前,共有 0 條評論

iframe

父視窗呼叫子視窗

var hasMore = parent.document.getElementByIdx_x_x_x("hasMore").value;

子視窗呼叫父視窗
document.frames["ifrmBoxFrame"].me.preLoadBoxGrid();
window.frames["iframe_ID"].document.getElementByIdx_x_x_x("iframe_document_object"-).object_attribute = attribute_value;


window
是對當前視窗自身的引用
如:


window.returnValue = ret;
window.close();

top
返回頂層視窗,即瀏覽器視窗。
如:


top.frames[tabID].location = url;
top.document.frames("ifrmBoxFrame").me.executeQueryCond();

parent
返回父視窗
如:


parent.$("Insheet_FrameTable").src = "";
parent.frames["Insheet_FrameSheetList"].initInsheetList(false);

opener

opener用於在window.open的頁面引用執行該window.open方法的的頁面的物件。例如:A頁面通過window.open()方法彈出了B頁面,在B頁面中就可以通過opener來引用A頁面,這樣就可以通過這個物件來對A頁面進行操作。 

如:


var url="editarable.htm?arableID=" + curArableID+"&isDeleteDisabled="+$("Btn_delArable").disabled;
window.open(url, "viewArable", "height=" + h + ",width=" + w + ",left=" + x + ",top=" +y + ",status=no,toolbar=no,menubar=no,location=no");
//第二個頁面中 使用opener
if(!(window.opener==null || window.opener.closed)){
window.opener.me.queryArable();
}
window.close();

首先來說說 parent.window與top.window的用法 
"window.location.href"、"location.href"是本頁面跳轉 
"parent.location.href"是上一層頁面跳轉 
"top.location.href"是最外層的頁面跳轉 
舉例說明: 
如果A,B,C,D都是jsp,D是C的iframe,C是B的iframe,B是A的iframe,如果D中js這樣寫 
"window.location.href"、"location.href":D頁面跳轉 
"parent.location.href":C頁面跳轉 
"top.location.href":A頁面跳轉 

parent.frames("frmEletroDocAttachInsert").frames("fraEletroDocAttachView").document.location = "about:blank";

top.document.frames('ifrmMainFrame').location.reload();


有兩個視窗: A視窗(父),B視窗(模態)

A視窗裡有一個DATAGRID,一個按鈕。

點選按鈕時,彈出B視窗(模態)。在B視窗中新增資料,提交後,要求B視窗自關閉,然後重新整理A視窗(父)
程式碼如下:

<script type="text/javascript">
function openSubWin()
{
window.showModalDialog('b.html', 'newwindow', 'height=500, width=400, top=0, left=0, toolbar=no, menubar=yes, scrollbars=yes,resizable=yes,location=no, status=no');
window.location.reload();
}
</script>

彈出子窗體b.html , 當關閉子窗體時 觸發父頁面重新整理

最近做物資系統的時候,又涉及到模態視窗的問題了,上次做的時候沒遇到這次這麼多東西,記下來吧
父視窗 js方法
程式碼如下:

function openwin(id){
var answer=window.showModalDialog("demand.do?method=queryBOM&mdid="+id+"&d="+escape(new Date()),window.self,"dialogWidth:700px;dialogHeight:620px:center:yes");
if(answer==1){
window.location.href = "demand.do?method=selmd&d="+escape(new Date()); //轉到處理頁面
//window.location.reload(); 重新整理父視窗
//winow.location.reload(true);

}
}

加個escape(new Date()) 避免讀取快取,當然也可以在子視窗中,加入
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
子視窗 js 方法:
程式碼如下:

function reVal(){
window.returnValue=1; //父視窗中 answer的值
window.close();
}

開啟模態視窗之後,父視窗會一直等待子視窗返回個值,如果是表單提交或是button就執行reVal()方法
返回answer的值,window.returnValue=1 這個地方我測試了 好像只能返回String型別的,陣列型別的不好使

在子視窗中使用 window.opener.location.reload(); 不好使,不試用於模態視窗,window.opern() 好使

還有個問題是:在模態視窗裡form 提交會彈出新視窗,這個問題簡單就在<head>裡面加個<base target="_self">
就可以搞定,注:我剛開始是不想通過form提交的,用js window.location.href 跳轉到不同的action去處理,發現
<base target="_self"> 就不起作用了,似乎 <base target="_self"> 只是針對form action="" 才起作用,這個地方應該可以用iframe 去實現。

用js判斷頁面重新整理或關閉的方法(onbeforeunload與onunload事件)
2014-09-14 12:51 | 11099人閱讀 | 來源
Onunload,onbeforeunload都是在重新整理或關閉時呼叫,可以在<script>指令碼中通過window.onunload來指定或者在<body>裡指定。區別在於onbeforeunload在onunload之前執行,它還可以阻止onunload的執行。
  Onbeforeunload也是在頁面重新整理或關閉時呼叫,Onbeforeunload是正要去伺服器讀取新的頁面時呼叫,此時還沒開始讀取;而onunload則已經從伺服器上讀到了需要載入的新的頁面,在即將替換掉當前頁面時呼叫。Onunload是無法阻止頁面的更新和關閉的。而 Onbeforeunload 可以做到。

頁面載入時只執行onload
頁面關閉時先執行onbeforeunload,最後onunload
頁面重新整理時先執行onbeforeunload,然後onunload,最後onload。

1、onbeforeunload事件:
  說明:目前三大主流瀏覽器中firefox和IE都支援onbeforeunload事件,opera尚未支援。
  用法:
   ・object.onbeforeunload = handler
   ・<element onbeforeunload = “handler” … ></element>
  描述:
   事件觸發的時候彈出一個有確定和取消的對話方塊,確定則離開頁面,取消則繼續待在本頁。handler可以設一個返回值作為該對話方塊的顯示文字。

  觸發於:
   ・關閉瀏覽器視窗
   ・通過位址列或收藏夾前往其他頁面的時候
   ・點選返回,前進,重新整理,主頁其中一個的時候
   ・點選 一個前往其他頁面的url連線的時候
   ・呼叫以下任意一個事件的時候:click,document write,document open,document close,window close ,window navigate ,window NavigateAndFind,location replace,location reload,form submit.
   ・當用window open開啟一個頁面,並把本頁的window的名字傳給要開啟的頁面的時候。
   ・重新賦予location.href的值的時候。
   ・通過input type=”submit”按鈕提交一個具有指定action的表單的時候。
  可以用在以下元素:
   ・BODY, FRAMESET, window
  平臺支援:
   IE4+/Win, Mozilla 1.7a+, Netscape 7.2+, Firefox0.9+
  示例:
程式碼如下:

   <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
   <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
   <title>onbeforeunload測試</title>
   <script>
   function checkLeave(){
    event.returnValue="確定離開當前頁面嗎?";
   }
   </script>
   </head>
   <body onbeforeunload="checkLeave()">
   </body>
   </html>

2、onunload事件
  用法:
   ・object.onbeforeunload = handler
   ・<element onbeforeunload = "handler"></element>

  描述:
   當使用者關閉一個頁面時觸發 onunload 事件。

  觸發於:
   ・關閉瀏覽器視窗
   ・通過位址列或收藏夾前往其他頁面的時候
   ・點選返回,前進,重新整理,主頁其中一個的時候
   ・點選 一個前往其他頁面的url連線的時候
   ・呼叫以下任意一個事件的時候:click,document write,document open,document close,window close ,window navigate ,window NavigateAndFind,location replace,location reload,form submit.
   ・當用window open開啟一個頁面,並把本頁的window的名字傳給要開啟的頁面的時候。
   ・重新賦予location.href的值的時候。
   ・通過input type=”submit”按鈕提交一個具有指定action的表單的時候。
  示例:
程式碼如下:

   <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
   <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
   <title>onunload測試</title>
   <script>
   function checkLeave(){
    alert("歡迎下次再來!");
   }
   </script>
   </head>
   <body onunload="checkLeave()">
   </body>
   </html>

一個判斷頁面是否真的關閉和重新整理的好方法:
程式碼如下:

window.onbeforeunload=function (){
alert("===onbeforeunload===");
if(event.clientX>document.body.clientWidth && event.clientY < 0 || event.altKey){
alert("你關閉了瀏覽器");
}else{
alert("你正在重新整理頁面");
}
}

這段程式碼就是判斷觸發onbeforeunload事件時,滑鼠是否點選了關閉按鈕,或者按了ALT+F4來關閉網頁,如果是,則認為系統是關閉網頁,否則在認為系統是重新整理網頁。


如何實現重新整理當前頁面呢?藉助js你將無所不能。
1,reload 方法,該方法強迫瀏覽器重新整理當前頁面。
語法:location.reload([bForceGet])  
引數: bForceGet, 可選引數, 預設為 false,從客戶端快取裡取當前頁。true, 則以 GET 方式,從服務端取最新的頁面, 相當於客戶端點選 F5("重新整理")
2,replace 方法,該方法通過指定URL替換當前快取在歷史裡(客戶端)的專案,因此當使用replace方法之後,你不能通過“前進”和“後退”來訪問已經被替換的URL。
語法: location.replace(URL)  
通常使用: location.reload() 或者是 history.go(0) 來做。
此方法類似客戶端點F5重新整理頁面,所以頁面method="post"時,會出現"網頁過期"的提示。
因為Session的安全保護機制。
當呼叫 location.reload() 方法時, aspx頁面此時在服務端記憶體裡已經存在, 因此必定是 IsPostback 的。
如果有這種應用: 需要重新載入該頁面,也就是說期望頁面能夠在服務端重新被建立,期望是 Not IsPostback 的。
這裡,location.replace() 就可以完成此任務。被replace的頁面每次都在服務端重新生成。
程式碼: location.replace(location.href);

返回並重新整理頁面:
location.replace(document.referrer);
document.referrer //前一個頁面的URL
不要用 history.go(-1),或 history.back();來返回並重新整理頁面,這兩種方法不會重新整理頁面。
附:
Javascript重新整理頁面的幾種方法:
程式碼如下:

1,history.go(0)
2,location.reload()
3,location=location
4,location.assign(location)
5,document.execCommand('Refresh')
6,window.navigate(location)
7,location.replace(location)
8,document.URL=location.href
自動重新整理頁面的方法:
1,頁面自動重新整理:把如下程式碼加入<head>區域中
程式碼如下:

<meta http-equiv="refresh" content="20">
其中20指每隔20秒重新整理一次頁面.
2,頁面自動跳轉:把如下程式碼加入<head>區域中
程式碼如下:

<meta http-equiv="refresh" content="20;url=http://www.jb51.net">
其中20指隔20秒後跳轉到http://www.jb51.net頁面
3,頁面自動重新整理js版
程式碼如下:

<script language="JavaScript">
function myrefresh()
{
   window.location.reload();
}
setTimeout('myrefresh()',1000); //指定1秒重新整理一次
</script>
4,JS重新整理框架的指令碼語句
程式碼如下:

//重新整理包含該框架的頁面用  
<script language=JavaScript>
   parent.location.reload();
</script>
//子視窗重新整理父視窗
<script language=JavaScript>
    self.opener.location.reload();
</script>
( 或 <a href="javascript:opener.location.reload()">重新整理</a>   )
//重新整理另一個框架的頁面用  
<script language=JavaScript>
   parent.另一FrameID.location.reload();
</script>
如果想關閉視窗時重新整理或想開窗時重新整理,在<body>中呼叫以下語句即可。
程式碼如下:

<body onload="opener.location.reload()"> 開窗時重新整理
<body onUnload="opener.location.reload()"> 關閉時重新整理
<script language="javascript">
window.opener.document.location.reload()
</script>


一、先來看一個簡單的例子:

下面以三個頁面分別命名為frame.html、top.html、bottom.html為例來具體說明如何做。
frame.html 由上(top.html)下(bottom.html)兩個頁面組成,程式碼如下:
程式碼如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> frame </TITLE>
</HEAD>
<frameset rows="50%,50%">
<frame name=top src="top.html">
<frame name=bottom src="bottom.html">
</frameset>
</HTML>

現在假設top.html (即上面的頁面) 有七個button來實現對bottom.html (即下面的頁面) 的重新整理,可以用以下七種語句,哪個好用自己看著辦了。
top.html 頁面的程式碼如下:
程式碼如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> top.html </TITLE>
</HEAD>
<BODY>
<input type=button value="重新整理1" onclick="window.parent.frames[1].location.reload()"><br>
<input type=button value="重新整理2" onclick="window.parent.frames.bottom.location.reload()"><br>
<input type=button value="重新整理3" onclick="window.parent.frames['bottom'].location.reload()"><br>
<input type=button value="重新整理4" onclick="window.parent.frames.item(1).location.reload()"><br>
<input type=button value="重新整理5" onclick="window.parent.frames.item('bottom').location.reload()"><br>
<input type=button value="重新整理6" onclick="window.parent.bottom.location.reload()"><br>
<input type=button value="重新整理7" onclick="window.parent['bottom'].location.reload()"><br>
</BODY>
</HTML>

下面是bottom.html頁面原始碼,為了證明下方頁面的確被重新整理了,在裝載完頁面彈出一個對話方塊。
程式碼如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> bottom.html </TITLE>
</HEAD>
<BODY onload="alert('我被載入了!')">
<h1>This is the content in bottom.html.</h1>
</BODY>
</HTML>

解釋一下:
程式碼如下:

1.window指代的是當前頁面,例如對於此例它指的是top.html頁面。
2.parent指的是當前頁面的父頁面,也就是包含它的框架頁面。例如對於此例它指的是framedemo.html。
3.frames是window物件,是一個陣列。代表著該框架內所有子頁面。
4.item是方法。返回陣列裡面的元素。
5.如果子頁面也是個框架頁面,裡面還是其它的子頁面,那麼上面的有些方法可能不行。
附:
Javascript重新整理頁面的幾種方法:
1 history.go(0)
2 location.reload()
3 location=location
4 location.assign(location)
5 document.execCommand('Refresh')
6 window.navigate(location)
7 location.replace(location)
8 document.URL=location.href

二、自動重新整理頁面
1.頁面自動重新整理:把如下程式碼加入<head>區域中
<meta http-equiv="refresh" content="20">
其中20指每隔20秒重新整理一次頁面.
2.頁面自動跳轉:把如下程式碼加入<head>區域中
<meta http-equiv="refresh" content="20;url=http://www.jb51.net">
其中20指隔20秒後跳轉到http://www.jb51.net頁面
3.頁面自動重新整理js版
<script language="JavaScript"> function myrefresh() { window.location.reload(); } setTimeout('myrefresh()',1000); //指定1秒重新整理一次 </script>
[Ctrl+A 全選 注: 如需引入外部Js需重新整理才能執行]

三、java在寫Servler,Action等程式時,要操作返回頁面的話(如談出了視窗,操作完成以後,關閉當前頁面,重新整理父頁面)
程式碼如下:

1 PrintWriter out = response.getWriter();
2 out.write("<script type=\"text/javascript\">");
3 ////子視窗重新整理父視窗
4 out.write("self.opener.location.reload();");
5 //關閉視窗
6 out.write("window.opener=null;");
7 out.write("window.close();");
8 out.write("</script>");

四、JS重新整理框架的指令碼語句
1.如何重新整理包含該框架的頁面用
程式碼如下:

<script language=JavaScript>
parent.location.reload();
</script>

2.子視窗重新整理父視窗
程式碼如下:

<script language=JavaScript>
self.opener.location.reload();
</script>

3.如何重新整理另一個框架的頁面用 (上面的例項以說明了)
程式碼如下:

語句1. window.parent.frames[1].location.reload();
語句2. window.parent.frames.bottom.location.reload();
語句3. window.parent.frames["bottom"].location.reload();
語句4. window.parent.frames.item(1).location.reload();
語句5. window.parent.frames.item('bottom').location.reload();
語句6. window.parent.bottom.location.reload();
語句7. window.parent['bottom'].location.reload();

4.如果想關閉視窗時重新整理或者想開窗時重新整理的話,在<body>中呼叫以下語句即可。
<body onload="opener.location.reload()">
開窗時重新整理
<body onUnload="opener.location.reload()">
關閉時重新整理
程式碼如下:

<script language="javascript">
window.opener.document.location.reload()
</script>

相關文章