如何访问子窗口的dom树?

Bil*_*lly 18 javascript

我使用以下代码打开一个新窗口:

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

我想访问purchaseWin的dom树,例如

purchaseWin.document.getElementById("tdProduct").innerHTML = "2";
Run Code Online (Sandbox Code Playgroud)

它不起作用.我只能这样做:

purchaseWin.document.write("abc");
Run Code Online (Sandbox Code Playgroud)

我也试过这个,它也不起作用:

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

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

   });
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

CMS*_*CMS 16

使用jQuery,您必须访问子窗口文档的内容:

$(purchaseWin.document).ready(function () {
  $(purchaseWin.document).contents().find('#tdProduct').html('2');
});
Run Code Online (Sandbox Code Playgroud)

没有库,使用纯JavaScript,您可以这样做:

purchaseWin.onload = function () {
  purchaseWin.document.getElementById('tdProduct').innerHTML = '2';
};
Run Code Online (Sandbox Code Playgroud)

我认为问题是你在子窗口实际加载之前尝试检索DOM元素.

  • 适用于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');}; (3认同)

Gun*_*nni 11

也许jQuery的load事件对你有用,因为这对我来说在类似的问题中起作用,而ready事件不起作用:

$(purchaseWin).load(function(){
    purchaseWin.$("#tdProduct").html("2");
});
Run Code Online (Sandbox Code Playgroud)

  • 这是让我可以访问孩子的 dom 的唯一答案。 (2认同)

小智 10

如果加载的页面不属于父窗口的域,则无法访问子窗口的文档.这是由于Javascript内置的跨域安全性.