2010-06-30 22 views
7

Hãy tưởng tượng rằng tôi có một cái gì đó như thế này:Làm cách nào để lấy yếu tố iframe gốc từ trang bên trong mà không biết id?

<html> 
... 
    <div> 
     <iframe src="test.html" hash="r4d5f7"></iframe> 
     <iframe src="test.html" hash="8f7x97"></iframe> 
     <iframe src="test.html" hash="gg4v5e"></iframe> 
     <iframe src="test.html" hash="e54f87"></iframe> 
    </div> 
... 
</html> 

test.html là trang trống, tùy chỉnh hash thuộc tính luôn luôn có một giá trị khác nhau, cả hai trang trên cùng một tên miền vì lý do an ninh, số lượng và thứ tự của iframe các phần tử là ngẫu nhiên.

Câu hỏi của tôi là: Có cách nào để truy cập từ trang bên trong (test.html) sử dụng Javascript đến phần tử khung nội tuyến thích hợp không? Giả sử, tôi đang ở trang iframe thứ ba và tôi cần truy cập phần tử iframe và giá trị băm alert() (trong trường hợp này là "gg4v5e").

Để cụ thể hơn. Nếu bạn đã quen thuộc với Firebug của Firefox, nó hình dung tình huống này như thế này:

<html> 
... 
    <div> 
     <iframe src="test.html" hash="r4d5f7"> 
      <html> 
       ... 
      </html> 
     </iframe> 
     <iframe src="test.html" hash="8f7x97"> 
      <html> 
       ... 
      </html> 
     </iframe> 
     <iframe src="test.html" hash="gg4v5e"> 
      <html> 
       ... 
      </html> 
     </iframe> 
     <iframe src="test.html" hash="e54f87"> 
      <html> 
       ... 
      </html> 
     </iframe> 
    </div> 
... 
</html> 

Có thể gọi là "cái gì đó" để có được yếu tố phụ huynh() khi tôi với Javascript của tôi tại <html> phần tử trong trang bên trong?

Trả lời

16

Chắc chắn có. Mã này hoạt động trong FF và IE6, Opera, Chrome (yêu cầu một máy chủ web và cả các file từ giao thức cùng một tên miền và cổng)

 function getHash() { 
      var ifs = window.top.document.getElementsByTagName("iframe"); 
      for(var i = 0, len = ifs.length; i < len; i++) { 
       var f = ifs[i]; 
       var fDoc = f.contentDocument || f.contentWindow.document; 
       if(fDoc === document) { 
       alert(f.getAttribute("hash")); 
       } 
      } 
     } 
+0

Cùng server, giao thức và cổng yêu cầu là dành cho Chrome – naikus

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