2011-09-06 39 views
9

Tôi có một trang có Iframe và Javascript từ Iframe truy cập vào chức năng của khung chính. Các trang nằm trên cùng một máy chủ (không phải là tập lệnh miền chéo), tôi không gặp vấn đề gì với FF và IE nhưng khi tôi sử dụng nó trên Chrome, tôi có thông báo bên dưới.JavaScript không an toàn để truy cập khung bằng URL

không an toàn JavaScript cố gắng truy cập vào khung với URL http://samedomain:51700/irj/servlet/prt/portal/prtroot/CRMApp73.StoricoApp từ khung với URL http://samedomain:51700/irj/servlet/prt/portal/prtroot/CRMApp73.CRMOProxy. Tên miền, giao thức và cổng phải khớp.

Làm cách nào để giải quyết vấn đề này? Tôi tìm kiếm bởi google kể từ 4 giờ. Tôi hy vọng ai đó có thể giúp tôi.

EDIT: mã

Đây là JavaScript trong trang khung nội tuyến. JavaScript này gọi một khung cha mẹ Javascript chức năng "setUfficioPostale". Đây là điểm mà Chrome cho tôi lỗi "Truy cập không an toàn ...".

<script> 
    window.parent.setUfficioPostale(map); 
</script> 

Đây là Javascript trong khung chính để gửi biểu mẫu. Điều này là để gửi biểu mẫu ẩn với thông số ẩn tới trang được tải trong khung nội tuyến.

function onAltroUfficioClick(){ 
    document.getElementById("hiddenParams").submit(); 
    $('#framePosteMaps').show(); 
} 

Đây là định nghĩa khung nội tuyến trong trang gốc.

<iframe id="framePosteMaps" scrolling="no" name="framePosteMaps"></iframe> 

Đây là biểu mẫu có thuộc tính đích để gửi thông số đến trang iframe.

<form id="hiddenParams" target="framePosteMaps" action="http://samedomain:51700/irj/servlet/prt/portal/prtroot/TestFrameRC.SimPerProxy" method="POST"> 
    <input type="hidden" name="distanza" value="10"> 
    <input type="hidden" name="cliente" value="Retail"> 
    .................... 
</form> 
+0

Bạn có thể cho chúng tôi biết một số mã không? – UpHelix

+0

Mặc dù có vẻ như không cần thiết, có lẽ việc đặt 'document.domain' trong cả cha lẫn mẹ và iframe thành cùng một giá trị sẽ làm cho nó hoạt động? –

+0

thông báo: nếu tên miền của bạn là 'foo.somedomain.com' và' bar.somedomain.com' chúng không giống nhau. – c69

Trả lời

2

Chrome không cho phép bạn làm điều đó. Mã từ Iframe không thể truy cập mã mẹ.

2

Đầu tiên, kiểm tra xem cả hai trang đang được tham chiếu bằng cách sử dụng attr SRC của iframe trong chính xác cùng một cách, tôi muốn nói:

http://samedomain:51700/irj/ 
http://samedomain:51700/irj/ 

+ Nhà có thể, rằng ngay cả khi họ đang chạy trong cùng một máy, một trong những khung nội tuyến được gọi như:

http://localhost:51700/irj/ 

và người kia:

http://MachineId:51700/irj/ 

hoặc bất kỳ kết hợp nào khác.

Bạn có thể kiểm tra bằng cách kiểm tra mã bằng công cụ Nhà phát triển trong tất cả các trình duyệt hiện đại.

Chrome cho phép bạn gọi chức năng của cha mẹ nếu chúng ở trong cùng một tên miền (tôi thực hiện nó hàng ngày), vì vậy không có bất kỳ vấn đề gì.

tôi sử dụng chức năng này để acces trẻ em Iframe:

var getIframe = function (id) { 
    if ($.browser.mozilla) return document.getElementById(id).contentWindow; 
    return window.frames[id]; 
}; 

và chỉ là "parent.yourParentFunction()" khi bạn muốn truy cập vào một chức năng trong công ty mẹ.

Kiểm tra xem chức năng của cha mẹ được gán cho đối tượng Window (global namespace)

Chúc may mắn với điều đó :-)

+3

Chỉ cần một lưu ý nhỏ: nó không phải là một thực hành tốt để kiểm tra cho loại trình duyệt/phiên bản. Kiểm tra tính khả dụng của tính năng thay thế! –

1

Khung cha mẹ có thể đặt một giá trị document.domain khác nhau từ "samedomain" . Cập nhật thuộc tính document.domain trong khung nội tuyến js thành giá trị được đặt trong khung chính và nó sẽ hoạt động.

+2

Vui lòng cung cấp một số mã ví dụ trong câu trả lời của bạn. –

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