2011-11-22 35 views
6

Tôi có iframe (tên miền chéo) với src từ facebook, twitter hoặc v.v. Tôi cần có chiều cao iframe nhưng tôi gặp vấn đề: "Quyền bị từ chối truy cập tài liệu '' '. Xin hãy giúp tôi giải quyết vấn đề này. Cảm ơn nhiều!Cách lấy chiều cao của tên miền chéo iframe

Trả lời

6

Vấn đề về cặp đôi. Đầu tiên, chiều cao của iframe có thể không phải là thứ bạn muốn. Tôi có nghĩa là đó là thiết lập rõ ràng trong mã HTML của trang bạn kiểm soát và có thể truy cập dễ dàng và có thể sửa đổi thông qua bất kỳ phương tiện Javascript. Những gì bạn xuất hiện sau đó là chiều cao của trang bên trong iframe. Nếu đó là trường hợp, câu trả lời đơn giản là bạn không thể, ít nhất là không với các dịch vụ bên ngoài như Facebook/Twitter.

Vì lý do bảo mật, người ta có thể dễ dàng truyền tin nhắn từ trẻ sang cha mẹ, nhưng không phải từ cha mẹ sang con, trừ khi đường dẫn truyền thông được tích hợp vào javascript trong cả hai tài liệu. Có giao thức postMessage để xử lý điều này trong các trình duyệt hiện đại. https://developer.mozilla.org/en/DOM/window.postMessage. Nhưng, nó hoàn toàn vô dụng trong trường hợp này trừ khi tài liệu bạn đang giao tiếp được thiết lập để xử lý một postMessage đến, mà theo hiểu biết của tôi Twitter/Facebook thường xuyên thì không.

Nếu tài liệu gốc có thể tự do giao tiếp với trẻ em từ các miền khác nhau, thì bất kỳ javascript nào có thể thực thi hiệu quả mọi chuỗi lệnh trên bất kỳ trang web nào bạn đăng nhập. Các tác động an ninh của điều đó là đáng sợ và may mắn là không thể.

1

Không có tùy chọn trong javascript để tìm chiều cao của chiều cao iframe tên miền chéo nhưng bạn có thể thực hiện điều gì đó như thế này với sự trợ giúp của một số chương trình phía máy chủ. Tôi đã sử dụng PHP cho ví dụ này

<?php 
$output = file_get_contents('http://yourdomain.com'); 
?> 
<div id='iframediv'> 
    <?php echo $output; ?> 
</div> 

<iframe style='display:none' id='iframe' src="http://yourdomain.com" width="100%" marginwidth="0" height="100%" marginheight="0" align="top" scrolling="auto" frameborder="0" hspace="0" vspace="0"> </iframe> 

<script> 
if(window.attachEvent) { 
    window.attachEvent('onload', iframeResizer); 
} else { 
    if(window.onload) { 
     var curronload = window.onload; 
     var newonload = function(evt) { 
      curronload(evt); 
      iframeResizer(evt); 
     }; 
     window.onload = newonload; 
    } else { 
     window.onload = iframeResizer; 
    } 
} 
    function iframeResizer(){ 
     var result = document.getElementById("iframediv").offsetHeight; 

     document.getElementById("iframe").style.height = result; 
     document.getElementById("iframediv").style.display = 'none'; 
     document.getElementById("iframe").style.display = 'inline'; 
    } 
</script> 
Các vấn đề liên quan