2010-04-05 27 views
22

Tôi đang tìm một cách trình duyệt chéo để phát hiện xem khung gốc có cùng gốc với khung của tôi hay không, tốt nhất là không in các cảnh báo trên bảng điều khiển lỗi JavaScript.JavaScript để phát hiện xem khung chính có cùng nguồn gốc không?

Sau đây có vẻ như hoạt động nhưng tôi muốn tránh lỗi in cho bảng điều khiển (ít nhất là Safari và Chrome thực hiện khi truy cập location.href trên khung chính. Firefox ném ngoại lệ có thể bị bắt):

function parentIsSameOrigin() { 
    var result = true; 
    try { 
     result = window.parent.location.href !== undefined; 
    } catch (e) { 
     result = false; 
    } 
    return result; 
} 

Trả lời

0

Hãy thử điều này:

function parentIsSameOrigin() 
{ 
    var result = true; 
    if (window.parent) 
    { 
     result = Boolean 
     (
      // more precise modifications needed here 
      window.this.location.href.indexOf(window.parent.location.href) == 0 
     ); 
    } 
    return result; 
} 
+2

Dường như có thêm "này" trong đó, nhưng ngay cả khi tôi gỡ bỏ nó, tôi vẫn nhận được một cảnh báo. Chỉ cần truy cập 'window.parent.location.href' sẽ kích hoạt nó. – tlrobinson

+1

Điều này cũng sẽ vẫn có cùng một ngoại lệ gốc. – Spork

1

tôi sử dụng phương pháp này để nói nếu một iframe có chứa nội dung địa phương,

nhưng bạn có thể vượt qua nó window.top từ thứ e iframe chỉ cũng

function islocal(win){ 
var H=location.href, 
    local= H.substring(0, H.indexOf(location.pathname)); 
    try{ 
     win=win.document; 
     return win && win.URL && win.URL.indexOf(local)== 0; 
    } 
    catch(er){ 
     return false 
    } 
} 

// test alert (islocal (window.top))

+0

Đây không phải là trình duyệt chéo vì hỗ trợ ['window.URL' rất khác nhau] (https://developer.mozilla.org/en-US/docs/Web/API/Window/URL) – igorsantos07

+0

Các trình duyệt duy nhất không hỗ trợ cửa sổ. URL là hết hạn. Vì vậy, trừ khi bạn là JQuery .... – Indolering

6

tôi sẽ làm một cái gì đó như:

var sameOrigin; 
try 
{ 
    sameOrigin = window.parent.location.host == window.location.host; 
} 
catch (e) 
{ 
    sameOrigin = false; 
} 
return sameOrigin; 
+0

Cảm ơn - điều này đã thực sự pissing tôi đi! – jack

+3

Tôi thật đáng buồn đã dành một vài giờ với giải pháp này, chỉ để tìm ra điều này không làm việc cho WebKit nơi cùng một nguồn gốc Lỗi là không thể hiểu được. KHÔNG sử dụng giải pháp này. – Spork

+1

@Spork, tôi không gặp sự cố này khi sử dụng Chrome gần đây (43). Bạn có thể nói về sự cố nào của phiên bản/trình duyệt này xảy ra không? –

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