2010-06-13 25 views
6

Trang A.com có 2 iframe B.com/page1B.com/page2. Đây là mã của A.com:thực hiện chức năng javascript trong một iframe khác khi cha mẹ là từ miền khác nhau

<html><body> 
    <iframe src="b.com/page1" name="iframe1" id="iframe1"> 
    <iframe src="b.com/page2"> 
</body></html> 

Tôi muốn thực hiện chức năng js trên B.com/page1 từ B.com/page2. Cả hai ví dụ dưới đây hoạt động tốt khi phụ huynh là từ cùng một tên miền nhưng không có trong kịch bản tên miền chéo:

parent.window.frames['iframe1'].SomeFunction(args); 

hoặc

parent.document.getElementById('iframe1').contentWindow.SomeFunction(args); 

Có cách nào để làm điều đó?

Trả lời

7

Thay vì

parent.window.frames['iframe1'].SomeFunction(args); 

sử dụng

parent.frames['iframe1'].SomeFunction(args); 

Bạn được phép đi qua frames bộ sưu tập của bất kỳ cửa sổ mà bạn có thể tham khảo, nhưng trong trường hợp này, bạn đang cố gắng để đi qua đệ quy window tài sản của parent (đó là cửa sổ). Điều này không được phép.

+0

Sean, nhưng window.window là chính xác như cửa sổ. Tuy nhiên, tôi đã thử này 'parent.window.window.window.frames ['if1']. Window.window.window.s2 (1)' và nó đã làm việc ... (hoặc bạn nói về đi qua cái gì khác?) –

3

Không, trình duyệt không cho phép tương tác giữa các iframe không có cùng tên miền.

+0

Chỉ cần làm rõ. Mặc dù 2 iframe là từ cùng một tên miền nhưng không có cách trực tiếp nào để chúng tương tác vì cha mẹ là từ tên miền khác nhau? – Frushko

+0

Không, bởi vì iframe chỉ có thể "nói chuyện" với nhau thông qua khung chính và các khung không thể truy cập vào khung chính từ một miền khác. –

+2

Thực ra, điều này là không chính xác. Anh ta chỉ cần thay đổi 'parent.window.frames' thành' parent.frames' –

0

Như Aaron đã nói với bạn, trình duyệt không cho phép điều này, nhưng có nhiều cách xung quanh nó. Bạn sẽ cần phải tạo một hack nhỏ. Eugene Gladyshev có một số post on it on his blog.

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