2009-08-11 3 views
16

открыть новое окно, используя следующий код:Как я могу получить доступ к дереву dom дочернего окна?

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

Я хочу, чтобы получить доступ к DOM дерево в purchaseWin, например,

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

Не работает. Я могу сделать это только:

purchaseWin.document.write("abc"); 

Я также попробовать это, и это не работает слишком:

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

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

    }); 

Что я должен делать?

ответ

14

С JQuery, вы должны получить доступ к contents документу окна Вашего ребенка:

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

Без библиотек, с простым JavaScript, вы можете сделать это следующим образом:

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

I что проблема заключается в том, что вы пытались извлечь элемент DOM до фактического загрузки дочернего окна.

+1

Простая версия Javascript работает. Но версия jQuery терпит неудачу. Мне нужно запустить jQuery-код вручную в родительском окне для работы. – Billy

+3

Работает в IE (не firefox): $ (purchaseWin.document) .ready (function() {$ (purchaseWin.document) .contents(). Find ('# tdProduct'). Html ('2');}); Работает в FF (не IE): purchaseWin.onload = function() {$ (purchaseWin.document) .contents(). Find ('# tdProduct'). Html ('2');}; – Billy

+1

См. Ответ Gunni, используя $ (purchaseWin) .load для опции jQuery, тогда как событие готовности документа не было. – Luke

9

Возможно событие нагрузки JQuery работает для вас, как это работает для меня в подобной проблеме, в то время как готовое событие не получилось:

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

Я не вижу, что нового уважает принятый ответ? –

+0

Новым является то, что я использую событие .load, в то время как принятый ответ использует событие .ready. Для меня это имело значение. – Gunni

+1

Это единственный ответ, который дал мне доступ к дому ребенка. – thatmiddleway

7

Вы не можете получить доступ к документу дочернего окна при загрузке страницу, которая не принадлежит домену родительского окна. Это связано с междоменной безопасностью, встроенной в 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; 
    }; 
    }; 
})(); 
Смежные вопросы