2011-11-15 20 views
14

Tôi đã tạo một tiện ích và tôi cần phải chuyển hướng cửa sổ chính tới một số url nhất định, sau sự kiện cụ thể trong cửa sổ bật lên, whitch base trên một tên miền khác. Làm thế nào có thể làm điều này.Làm cách nào để truy cập từ cửa sổ bật lên trên nhiều trang web đến window.opener?

window.opener.location.replace(url); 
+0

cố gắng javascript không an toàn để truy cập khung bằng url)) – NiLL

+0

Điều đó nghe giống như tập lệnh tên miền chéo sẽ bị ngăn chặn bởi các giới hạn bảo mật; hoặc tôi đang đọc câu hỏi không chính xác? – COBOLdinosaur

+0

Tôi muốn kmow, tôi có thể giải quyết những hạn chế này không. – NiLL

Trả lời

27

Bạn không thể làm điều đó. Cross-site scripting không được cho phép trong hầu hết các trình duyệt.

Bạn có thể, tuy nhiên, giao tiếp với các cửa sổ khác qua tin nhắn qua tài liệu mô tả ở đây: https://developer.mozilla.org/en/DOM/window.postMessage

Các nhất mà bạn có thể để là để gửi một thông điệp từ popup để mở tỷ số và lắng nghe thông điệp như vậy trong mở. Cái mở sau đó phải tự thay đổi vị trí của nó.

// popup: 
window.opener.postMessage('replace your location', '*'); 

// opener: 
window.onmessage = function (e) { 
    if (e.data === 'replace your location') { 
    window.location.replace(...); 
    } 
}; 
+2

FYI postMessage không hoạt động trong IE giữa các cửa sổ bật lên, ngay cả trong IE10 –

+0

Mở của tôi phải ở trên miền khác www.mydomain.com. Tôi muốn gửi cho anh ta một số dữ liệu nhạy cảm. Làm thế nào tôi có thể kiểm tra, nếu mở của tôi thực sự là www.mydomain.com? –

+0

Nhưng 'window.opener' tự trả về null trong trường hợp của tôi .. Sau đó, tôi sẽ đăng thông báo như thế nào. –

0

Trong một số trường hợp, có thể thực hiện điều đó, nhưng chỉ với các tên miền phụ khác nhau, chứ không phải tên miền hoàn toàn khác. Xem Cross site scripting on the same domain, different sub domains.

Nhưng kể từ khi postMessage() có sẵn rộng rãi trong các trình duyệt hiện tại, bạn nên luôn luôn thích postMessage(), như @ ian-kuca đề xuất.

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