2009-08-11 33 views
16

tôi mở một cửa sổ mới bằng cách sử dụng đoạn mã sau:Tôi làm cách nào để truy cập cây dom của cửa sổ con?

purchaseWin = window.open("Purchase.aspx","purchaseWin2", "location=0,status=0,scrollbars=0,width=700,height=400"); 

tôi muốn truy cập các cây dom của purchaseWin, ví dụ

purchaseWin.document.getElementById("tdProduct").innerHTML = "2"; 

Nó không hoạt động. Tôi chỉ có thể làm điều này:

purchaseWin.document.write("abc"); 

tôi cũng cố gắng này và nó không hoạt động quá:

$(purchaseWin.document).ready(function(){ 

    purchaseWin.$("#tdProduct").html("2"); 

    }); 

Tôi nên làm gì?

Trả lời

14

Với jQuery, bạn phải truy cập vào contents của tài liệu của cửa sổ con của bạn:

$(purchaseWin.document).ready(function() { 
    $(purchaseWin.document).contents().find('#tdProduct').html('2'); 
}); 

Nếu không có thư viện, với đồng bằng JavaScript, bạn có thể làm theo cách này:

purchaseWin.onload = function() { 
    purchaseWin.document.getElementById('tdProduct').innerHTML = '2'; 
}; 

tôi nghĩ rằng vấn đề là bạn đang cố gắng lấy lại phần tử DOM trước khi cửa sổ con thực sự được nạp.

+1

Phiên bản Javascript đơn giản hoạt động. Nhưng phiên bản jQuery không thành công. Tôi cần phải chạy mã jQuery bằng tay trong cửa sổ cha để làm việc. – Billy

+3

Hoạt động trong IE (không phải firefox): $ (purchaseWin.document) .ready (function() {$ (purchaseWin.document) .contents(). Find ('# tdProduct'). Html ('2');}); Hoạt động trong FF (không phải IE): purchaseWin.onload = function() {$ (purchaseWin.document) .contents(). Find ('# tdProduct'). Html ('2');}; – Billy

+1

Xem phản hồi của Gunni, sử dụng $ (purchaseWin) .load cho tùy chọn jQuery hoạt động trong khi sự kiện sẵn sàng tài liệu không. – Luke

9

Có lẽ trường hợp tải trọng của jQuery làm việc cho bạn như thế này làm việc cho tôi trong một vấn đề tương tự, trong khi sự kiện đã sẵn sàng không làm việc:

$(purchaseWin).load(function(){ 
    purchaseWin.$("#tdProduct").html("2"); 
}); 
+0

Tôi không thấy sự tôn trọng mới của câu trả lời được chấp nhận là gì? –

+0

Mới là tôi sử dụng sự kiện .load trong khi câu trả lời được chấp nhận sử dụng sự kiện .ready. Đối với tôi, điều đó tạo nên sự khác biệt. – Gunni

+1

Đây là câu trả lời duy nhất cho phép tôi tiếp cận với mái vòm của đứa trẻ. – thatmiddleway

7

Bạn không thể truy cập vào tài liệu của một cửa sổ con nếu bạn nạp một trang không thuộc về miền của cửa sổ chính. Điều này là do bảo mật tên miền chéo được tích hợp vào Javascript.

0
(function() { 

    document.getElementById("theButton").onclick = function() { 

    var novoForm = window.open("http://jsbin.com/ugucot/1", "wFormx", "width=800,height=600,location=no,menubar=no,status=no,titilebar=no,resizable=no,"); 
    novoForm.onload = function() { 
     var w = novoForm.innerWidth; 
     var h = novoForm.innerHeight; 
     novoForm.document.getElementById("monitor").innerHTML = 'Janela: '+w+' x '+h; 
    }; 
    }; 
})(); 
Các vấn đề liên quan