2011-01-30 31 views
12

Tôi đang cố gắng để được thông báo khi cửa sổ con tôi đang mở có tài liệu được tải và sẵn sàng. Điều này dường như không hoạt động:jQuery: nhận tài liệu sẵn sàng() trên cửa sổ con

win = window.open(href, 'test', 'width=300, height=400'); 
win.focus(); 
$(win.document).ready(function() { 
      // Ok, the function will reach here but if I try to manipulate the 
      // DOM it doesn't work unless I use breakpoints 
      $(this).contents().find("...").doStuff(); // nothing happens 
    }); 

Tôi phải làm gì?

+0

nhờ McLovin! điều này đã giúp tôi giải quyết một vấn đề tương tự – DevDave

Trả lời

8

Bạn đã thử điều này chưa? -

$(win.document).ready(function() { 
    $(win.document).contents().find("...").doStuff(); 
}); 

This question thảo luận về điều gì đó rất giống nhau. Bản sao?

+4

Có Tôi cũng đã thử điều đó. Nếu sự kết hợp của tôi từ các bài kiểm tra của tôi là chính xác, vấn đề là hàm ready() được kích hoạt trong khi cây DOM chưa thực sự sẵn sàng .. – mrmclovin

+1

Bạn đã thử JS đơn giản chưa, điều đó được đề cập trong câu trả lời cho câu hỏi khác ? – polarblau

+5

Có nó hoạt động với javascript thủ công, cảm ơn bạn! Phải làm điều này: \t win.onload = function() { \t \t form = $ (this.document.getElementById (form_id)); \t \t form.submit (function (evt) { – mrmclovin

1

Sử dụng window.opener trong tập lệnh trên trang web mà bạn đang tải và thực thi hàm được xác định trong toàn cầu (!) Ở trang đầu tiên.

Trang chính:

<html> 
<head> 
<script type="text/javascript"> 
    window.notify = function() { 
     alert('runned from opened window'); 
    }; 
    window.onload = function() { 
     document.getElementById('button').addEventListener('click', function() { 
      window.open('test.html'); 
     }, false); 
    }; 
</script> 
</head> 
<body> 
<button id="button">Open window</button> 
</body> 

trang Khai trương:

<html> 
<head> 
<script type="text/javascript"> 
    window.onload = function() { 
     window.opener.notify() 
    }; 
</script> 
</head> 
<body> 
    Popup site 
</body> 
</html> 
+0

Cảm ơn bạn đã đề xuất. Tuy nhiên, tôi không thể (không muốn) chỉnh sửa trang web mục tiêu mà tôi đang mở! – mrmclovin

5

Tôi đã có một vấn đề tương tự và cho tôi sự kiện .load trên cửa sổ làm việc, đã sẵn sàng làm không phải. Vì vậy, bạn có thể thử:

win = window.open(href, 'test', 'width=300, height=400'); 
$(win).load(function() { 
    $(this).contents().find("...").doStuff(); 
}); 
+0

Điều này làm việc cho tôi trong Chrome và FF, nhưng IE không chạy gọi lại. Tôi đã kết thúc việc thêm 'setInterval' tự hủy để kiểm tra xem cửa sổ con đã sẵn sàng chưa và chạy Mã số –

+0

Tôi đã tìm hiểu tại sao 'ready' không hoạt động, vì vậy tôi sẽ chia sẻ nó. ' $ (win.document) .ready' hoàn toàn tương đương với '$ (cửa sổ) .ready'. Xem [nguồn ] (https://github.com/jquery/jquery/blob/3.3.1/src/core/ready.js#L13-L26) (Lưu ý: ngay cả khi đăng câu hỏi này, đó là năm 2011, 'ready' hoạt động tương tự như v3.3.1) Chúng ta nên sử dụng 'load' thay vì' ready' cho mục đích, như Gunni gợi ý. – anqooqie

0

Chỉ cần thêm mã này trong iframe,

$(document,parent.document).ready(function(){ 
alert('Done'); 
}); 
Các vấn đề liên quan