2009-11-22 62 views
35

Tôi đang gọi hàm javascript window.open() để tải một url khác trong cửa sổ bật lên. Khi người dùng hoàn tất, họ sẽ đưa họ đến trang cuối cùng có một liên kết cho biết cửa sổ đóng gọi hàm window.close(). Bây giờ khi trang đó đóng, tôi cần phải cập nhật một cái gì đó trong trang gốc đã mở cửa sổ. Có cách nào để làm điều này không? Tôi phải gọi một chức năng có trong trang gốc của tôi.Làm thế nào để chạy chức năng của cửa sổ cha khi cửa sổ con đóng?

+0

Xem http://stackoverflow.com/questions/1112340/how-to-run-function-of-parent-window-when-child-window-closes –

Trả lời

54

Bạn bằng cách nào đó có thể thử này:

cửa sổ Sinh ra:

window.onunload = function (e) { 
    opener.somefunction(); //or 
    opener.document.getElementById('someid').innerHTML = 'update content of parent window'; 
}; 

Chánh Window:

window.open('Spawn.htm',''); 
window.somefunction = function(){ 

} 

Bạn không nên làm điều này vào ngày e cha mẹ, nếu không opener.somefunction() sẽ không làm việc, làm window.somefunction làm SomeFunction như công cộng:

function somefunction(){ 

} 
+1

Đó là chính xác những gì tôi đang tìm kiếm các công trình lớn. – ngreenwood6

+0

+1, đã giúp tôi vào đúng thời điểm. Viết window.somefunction = function {....} giống như chức năng viết somefunction() {....} –

+1

Điều này không hoạt động trên IE nếu cửa sổ sinh ra và cửa sổ chính không nằm trong cùng một tên miền – Binod

9

Bạn có thể muốn sử dụng sự kiện 'onbeforeunload'. Nó sẽ cho phép bạn gọi một hàm trong cửa sổ cha từ con ngay lập tức trước khi cửa sổ con đóng lại.

Vì vậy, có lẽ là một cái gì đó như thế này:

window.onbeforeunload = function (e) { 
    window.parent.functonToCallBeforeThisWindowCloses(); 
}; 
+0

ok trông giống như những gì tôi đang tìm kiếm nhưng làm thế nào nó sẽ biết những gì cửa sổ Tôi đang nói về.Ví dụ, nếu tôi làm window.open() và sau đó tôi thêm rằng dưới đây nó sẽ biết cửa sổ đó của nó hoặc làm thế nào để tôi đính kèm nó vào cửa sổ đó? – ngreenwood6

+0

Bạn sẽ đặt onbeforeunload đó vào một thẻ script trong HTML của cửa sổ con của bạn. Vì cửa sổ con chỉ có một phụ huynh nên trình duyệt sẽ tự động biết cửa sổ chính đó là gì. –

+0

vì vậy nếu tôi có một chức năng được gọi là doSomething() trong cửa sổ cha mẹ nhưng nó không được xác định trong cửa sổ con nó vẫn sẽ cho phép tôi chạy nó? – ngreenwood6

4

Những câu trả lời như họ yêu cầu bạn phải thêm mã vào cửa sổ sinh ra. Đó là khớp nối không cần thiết.

// In parent window 
var pop = open(url); 
pop.onunload = function() { 
    // Run your code, the popup window is unloading 
    // Beware though, this will also fire if the user navigates to a different 
    // page within thepopup. If you need to support that, you will have to play around 
    // with pop.closed and setTimeouts 
} 
0

Tôi biết bài này là cũ, nhưng tôi thấy rằng điều này thực sự hoạt động tốt:

window.onunload = function() { 
    window.opener.location.href = window.opener.location.href; 
}; 

Phần window.onunload đã gợi ý tôi thấy googling trang này. Cảm ơn, @jerjer!

-2

Kiểm tra sau link. Đây sẽ là hữu ích quá ..

Trong cửa sổ phụ huynh:

function OpenChildAsPopup() { 
     var childWindow = window.open("ChildWindow.aspx", "_blank", 
     "width=200px,height=350px,left=200,top=100"); 
     childWindow.focus(); 
} 

function ChangeBackgroudColor() { 
     var para = document.getElementById('samplePara'); 
     if (para !="undefied") { 
      para.style.backgroundColor = '#6CDBF5'; 
     } 
} 

Window Chánh HTML Markup:

<div> 
    <p id="samplePara" style="width: 350px;"> 
      Lorem ipsum dolor sit amet, consectetuer adipiscing elit. 
    </p><br /> 
<asp:Button ID="Button1" Text="Open Child Window" 
     runat="server" OnClientClick="OpenChildAsPopup();"/> 
</div> 

Trong Window Child:

// This will be called when the child window is closed.  
    window.onunload = function (e) { 
     opener.ChangeBackgroudColor(); 
     //or you can do 
     //var para = opener.document.getElementById('samplePara'); 
     //if (para != "undefied") { 
     // para.style.backgroundColor = '#6CDBF5'; 
     //} 
    }; 
7

Đây là một bài cũ , nhưng tôi nghĩ tôi sẽ thêm một phương pháp khác để thực hiện việc này:

var win = window.open("http://www.google.com"); 

var winClosed = setInterval(function() { 

    if (win.closed) { 
     clearInterval(winClosed); 
     foo(); //Call your function here 
    } 

}, 250); 

Bạn không phải sửa đổi nội dung hoặc sử dụng bất kỳ trình xử lý sự kiện nào từ cửa sổ con.

+0

Bạn là thiên tài, bro! Cảm ơn!!! –

0

Cùng với câu trả lời jerjer (trên cùng), đôi khi trong cửa sổ cha mẹ của bạn và cửa sổ con là không được cả hai bên ngoài hoặc cả hai bên, bạn sẽ thấy một vấn đề về mở không xác định, và bạn không thể truy cập vào các thuộc tính trang mẹ, xem window.opener is undefined on Internet Explorer

Các vấn đề liên quan