6

Tôi có một trang tại một máy chủ nội bộ, server1.mydomain.com/page.jsp và một trang khác tại một máy chủ nội bộ khác nhau, 10.x.x.x: 8081/page.aspx.SECURITY_ERR: Ngoại lệ DOM 18 khi áp dụng document.domain trên cả hai trang web. Làm cách nào để giải quyết vấn đề này?

On server1.mydomain.com, tôi đặt document.domain trong page.jsp như thế này:

//page.jsp on server1.mydomain.com 
document.domain = document.domain; 

Khi tôi phát hành một cảnh báo trên document.domain, nó đi lên như server1.mydomain.com.

Trên máy chủ 10.xxx, tôi đặt document.domain trong page.aspx, kết quả là như thế này:

//page.aspx on 10.x.x.x 
document.domain = "server1.mydomain.com"; 
// test if same-origin policy violation occurs 
document.getElementById("div_el").innerHTML = window.top.location.href; 

Trong Safari 5.1.5, một lỗi bật lên trên bàn điều khiển:

SECURITY_ERR: DOM Exception 18: An attempt was made to break through the security policy of the user agent." 

Từ những gì tôi hiểu, khi bạn đặt document.domain, số cổng được đặt thành rỗng; vì vậy, bạn phải đặt nó trên cả hai đầu, mà tôi đã làm. Sau đó, lỗi này xảy ra và tôi đang gãi đầu vì sao. Điều này có bất cứ điều gì để làm với thực tế tôi đang sử dụng 10.x.x.x và không phải là một tên miền thực tế?

Cảm ơn bạn.

Trả lời

15

Bạn chỉ có thể sử dụng document.domain để thay đổi từ miền phụ cụ thể hơn thành miền ít cụ thể hơn. Like ...

console.log(document.domain); // server1.mydomain.com 

document.domain = 'mydomain.com' 

console.log(document.domain); // mydomain.com 

Không thể sử dụng để đặt thành miền phụ cụ thể hơn hoặc tên miền hoàn toàn khác.

+0

Vì vậy, nếu tôi thay đổi cả hai thành mydomain.com, với điều kiện cả hai máy chủ đều nằm trên mydomain.com, nó sẽ hoạt động? Giả sử tôi có server1.subdomain.mydomain.com và server2.subdomain.mydomain.com. Nếu tôi đặt cả hai thành mydomain.com, nó có hoạt động không? – user717236

+1

@ user717236: Nếu trang của khách hàng được lưu trữ từ 'mydomain.com', bạn sẽ không thể thực hiện các yêu cầu AJAX đến' server1.subdomain.mydomain.com' hoặc 'server2 ...' và sử dụng 'tài liệu. domain' sẽ không giúp ích gì. Nhưng nếu ngược lại là đúng, và trang của khách hàng được lưu trữ ví dụ từ 'server1.subdomain.mydomain.com', bạn có thể sử dụng' document.domain' để bạn có thể thực hiện các yêu cầu tới 'mydomain.com' . –

+0

Ồ, tôi hiểu rồi. Vì vậy, trong trường hợp của tôi, tôi không nghĩ rằng nó sẽ làm việc, bởi vì các trang được lưu trữ hiệu quả tại hostname.subdomain.mydomain.com. Nếu một là serverX.mydomain.com và một là serverY.subdomain.mydomain.com, thì tôi có thể làm điều gì đó với nó. Trở lại với bản vẽ. Cảm ơn sự giúp đỡ của bạn. – user717236

3

Bạn chỉ có thể đặt document.domain thành giá trị hiện tại hoặc thành một miền siêu của cài đặt hiện tại. Do đó, một trang tại "foo.something.com" có thể đặt nó thành "something.com", nhưng không phải là "something.else.com".

+0

Cảm ơn sự giúp đỡ của bạn. Có, tôi nghĩ rằng tôi hiểu nó tốt hơn một chút, bây giờ. Hai host này không thể giao tiếp với nhau bằng document.domain, vì nó được thiết lập. Tôi sẽ phải nghĩ về một thứ khác. Cảm ơn một lần nữa. – user717236