2010-04-05 33 views
22

我正在尋找一種跨瀏覽器的方式來檢測父框架是否與我的框架相同,最好在JavaScript錯誤控制檯上沒有打印警告。要檢測父框架是否具有相同原點的JavaScript?

以下似乎工作,但我想避免打印錯誤到控制檯(至少Safari和Chrome瀏覽器訪問父框架上的位置.href時,Firefox會拋出一個異常,可以被捕獲):

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

回答

0

試試這個:

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

似乎有一個額外的 「本」在那裏,但即使我刪除它,我收到警告。簡單地訪問'window.parent.location.href'會觸發它。 – tlrobinson 2010-04-05 01:08:46

+1

這也會產生相同的原點異常。 – Spork 2013-09-05 11:58:40

1

我用這個方法來告訴我們,如果一個iframe中含有本地內容,

,但你可以通過它從日window.top ËIFRAME一樣好

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 
    } 
} 

//測試例警報(islocal(window.top))

+0

由於['window.URL'支持變化很大],這不是跨瀏覽器(https://developer.mozilla.org/en-US/docs/Web/API/Window/URL) – igorsantos07 2015-07-08 15:49:30

+0

唯一不支持窗口的瀏覽器。 URL是生命週期結束。所以,除非你是JQuery .... – Indolering 2016-11-02 23:49:26

6

我會做這樣的事情:

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

謝謝 - 這真的讓我感到厭煩! – jack 2013-08-11 16:13:03

+3

我悲傷地花了幾個小時用這個解決方案,只是發現這不適用於WebKit,其中相同的起源錯誤是不可檢索的。 請勿使用此解決方案。 – Spork 2013-09-05 11:57:24

+1

@Spork,我沒有使用最近的Chrome(43)這個問題。你能告訴我哪個瀏覽器/版本會出現這個問題嗎? – 2015-07-24 16:21:51

相關問題