2010-02-12 35 views
21

Tôi mặc dù điều này sẽ đơn giản nhưng tôi không thể tìm thấy câu trả lời. Tôi cần biết cách tôi có thể truy cập tên của iframe từ bên trong iframe được cho biết. Tôi đã thử một cái gì đó như thế này nhưng nó không hoạt động.truy cập tên khung nội tuyến từ iframe bên trong

<iframe name="thename"> 
    <script type="text/javascript"> 
    alert(parent.name); 
    </script> 
</iframe> 

Trả lời

47

Bạn đã gần đúng. Đặt thuộc tính name trên frame hoặc iframe đặt thuộc tính name của đối tượng toàn cầu của khung là window thành chuỗi đó. (Không parent, trong đó đề cập đến cửa sổ của tài liệu sở hữu khung.)

Vì vậy, trừ một số kịch bản khác đã cố tình thay đổi tên, nó đơn giản như:

1.html: 
<iframe name="tim" href="2.html"></iframe> 

2.html: 
<script type="text/javascript"> 
    alert(window.name); // tim 
</script> 
+4

cách truy cập thuộc tính của khung nội tuyến? ví dụ, nếu nó có một số attr dữ liệu? – AlexStack

+8

@AlexStack: 'window.frameElement' đưa bạn phần tử từ tài liệu gốc đề cập đến chính bạn, sau đó bạn có thể' getAttribute' trên đó (giả sử bạn có quyền truy cập SOP). Xem http: // stackoverflow.com/questions/4097870/jquery-access-iframe-id-từ-iframe-content/4098384 # 4098384 cho dự phòng không có sẵn – bobince

0

Something như thế này nên làm việc:

parent.document.getElementById('idhere').name; 

Bạn phải sử dụng các phụ huynh và sau đó nhận được các yếu tố hoặc byId, Tên, vv ... sau đó truy cập vào các tài sản tên.

Vì vậy, mã của bạn nên được như thế:

<iframe name="thename"> 
<script type="text/javascript"> 
    var iframeName = parent.document.getElementById('idhere').name; 
</script> 
</iframe> 
+2

gì nếu bạn không biết ID hoặc khung nội tuyến nằm trên một tên miền riêng biệt? –

+0

Sau đó, bạn sẽ phải sử dụng getElementsByTagName và lặp lại kết quả theo một số tiêu chí. –

0

Vâng, một yếu tố IFRAME nên không chứa bất cứ điều gì, nó đang nhắm mục tiêu tài liệu khác. Vì vậy, việc sử dụng thẻ SCRIPT bên trong một IFRAME không tạo ra nhiều ý nghĩa. Thay vào đó, hãy sử dụng SCRIPT bên trong tài liệu được gọi, ví dụ:

iframe_caller.html:

<html> 
<body> 
    <iframe id="theIframe" name="theIframe" src="iframe_doc.html"></iframe> 
</body> 
</html> 

iframe_doc.html:

<html> 
<body> 
    <script type="text/javascript"> 
    var iframes= parent.document.getElementsByTagName("iframe"); 
    document.write(iframes[0].getAttribute("id")); 
    </script> 
</body> 
</html> 

Note Tôi đang sử dụng parent.document.function() đó.

43

Có một sự kết hợp của câu trả lời tôi thích:

// window.frameElement Gets IFrame element which document inside 
window.frameElement.getAttribute("Name"); 

Nó hoạt động trên IE7 +, Mozilla & Chrome

+2

Tôi thích câu trả lời này nhiều hơn câu trả lời được chấp nhận vì nó tham chiếu đến phần tử khung nội tuyến thực tế. – keyneom

+0

tính năng này không hoạt động trên http://publisherconsole.appspot.com/safeframe/creative-preview.html, mọi đề xuất? – PayteR

+0

tôi đã tìm ra nó https://stackoverflow.com/a/46128839/839434 – PayteR

1

trong một số trường hợp window.frameElement trả về null trong khung nội tuyến, vì vậy tôi đã tìm ra giải pháp cho nó.

1. bạn cần phải thiết lập băm trong url src của iframe

<iframe name="tim" href="2.html#your-hash"></iframe> 

2. trong iframe bạn có thể nhận được băm này với

<script type="text/javascript"> 
    var hash = window.location.hash; 
</script> 
Các vấn đề liên quan