2015-12-03 21 views
8

Tôi gặp một số sự cố khi gọi chức năng của iframe cụ thể sau khi tải lại iframe khác. Nó hoạt động trên tất cả các trình duyệt chính nhưng hoạt động hơi lạ trên Microsoft Edge. Bạn sẽ cần chòm sao sau để nhận lỗi. Tất cả các tệp đều nằm trong cùng một thư mục trên cùng một máy chủ. Tôi chưa đặt bất kỳ Chính sách bảo mật nội dung nào.Tại sao tôi nhận được "quyền bị từ chối" trong Microsoft Edge khi truy cập iframe mẹ

Nếu bạn tải Frame1.html mọi thứ sẽ ổn và bạn sẽ nhận được thông báo "cảnh báo".

Nhưng nếu bạn nhấp vào thẻ "Nhấp vào tôi" trên frame4.html, frame2.html sẽ được tải lại và bạn sẽ nhận được lỗi "cho phép bị từ chối" vì đối tượng mẹ (var tmpParent = parent;) không thể truy cập được. Nếu bạn nhấp lại vào một thẻ, nó sẽ hoạt động mà không có bất kỳ lỗi nào.

Tôi nghĩ rằng đó là lỗi Edge, bởi vì tất cả các trình duyệt khác có thể xử lý nó và nó chỉ xảy ra trên lần nhấp đầu tiên.

Lỗi cũng sẽ xảy ra nếu bạn sử dụng bố cục hàng đầu của phụ huynh.

Mã của topFrame.js được sử dụng để tìm Khung hình trên cùng của trang web của tôi. Tôi không thể đơn giản sử dụng hàng đầu vì có thể nhúng trang web của tôi.

Có ai có đầu mối không?

Cảm ơn rất nhiều!

frame1.html

<!DOCTYPE html> 
<html> 

<head> 
    <title>Frame 1</title> 
    <script type="text/javascript"> 
    var topFrame = this; 

    function myAlert() { 
     alert('alert'); 
    } 
    </script> 
</head> 

<body> 
    <iframe id="overallContentWrapper" name="mainFrame" src="frame2.html" frameborder="0"></iframe> 
</body> 

</html> 

Frame2.html

<!DOCTYPE html> 
<html> 

<head> 
    <title>Frame 2</title> 
    <script src="topFrame.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
    window.addEventListener("load", function load(event) { 
     window.removeEventListener("load", load, false); 

     try { 
     topFrame.myAlert(); 
     } catch (e) { 
     alert(e); 
     } 
    }, false); 
    </script> 
</head> 

<body> 
    <iframe name="subFrame" src="frame3.html" frameborder="0"></iframe> 
</body> 

</html> 

Frame3.html

<!DOCTYPE html> 
<html> 

<head> 
    <title>Frame 3</title> 
</head> 

<body> 
    <iframe name="subsubFrame" src="frame4.html" frameborder="0"></iframe> 
</body> 

</html> 

Frame4.html

<!DOCTYPE html> 
<html> 

<head> 
    <title>Frame 4</title> 
</head> 

<body> 
    <a href="frame2.html" target="mainFrame">Click me</a> 
</body> 

</html> 

topFrame.js

try { 
    var tmpParent = parent; 
    var topFrame = tmpParent.topFrame; 
    while (topFrame === undefined) { 
    tmpParent = tmpParent.parent; 
    topFrame = tmpParent.topFrame; 
    } 
} catch (e) { 
    alert(e); 
} 
+3

Có lẽ https://davidwalsh.name/iframe-permission-denied này – mplungjan

+1

Đặt x-frame-options thành SAMEORIGIN không khắc phục được :-(nhưng thx. – gollum1007

+1

@ gollum1007 bạn có quản lý để giải quyết vấn đề này không? Xin hãy chia sẻ Chúng tôi cũng đang trải qua những điều tương tự –

Trả lời

0

Vâng tôi biết im đưa cổ tôi trên dòng ở đây cố gắng đoán những gì IE đang cố gắng để cho bạn biết, nhưng tôi sẽ giả định rằng sử dụng loại thông tin liên lạc này sẽ đi ngược lại iframe được dự định làm gì.

Nếu bạn muốn liên lạc giữa các khung hình con với khung parnet, tôi khuyên bạn nên sử dụng postMessages thay thế. Tôi nghĩ rằng (tôi đã nói suy nghĩ) kịch bản của bạn đang bị chặn chống lại XSS - cross scripting trang web. Vì vậy, nếu bạn muốn giao tiếp một số thông tin giữa khung cha mẹ và khung con hoặc cách khác xung quanh tôi đề nghị có một cái nhìn tại .

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