2010-05-02 46 views
2

我有一個包含多個iframe的頁面。其中一個iframe具有來自不同域的頁面。在這個iframe中,有另一個iframe和父域的頁面。查找執行腳本的iframe內部

my page from mydomain.com 
    -> an iframe 
    -> iframe "#foo" from another-domain.com> 
    -> iframe "#bar" from mydomain.com 
    -> another iframe 

我需要獲得對主頁面內「#foo」節點的引用。安全模型應該允許我這樣做,因爲「#bar」與主頁面具有相同的域。所以我在做的是遍歷window.top數組,並將每個元素與window對象進行比較,該對象當前是「#bar」窗口對象。我的測試代碼如下所示:

for (var i = 0; i < top.length; i++) { 
    for (var j = 0; j < top[i].length; j++) { 
     if (top[i][j] == window) { 
      alert("The iframe number " + i + " contains me"); 
     } 
    } 
} 

這適用於所有的瀏覽器罰款,但Internet Explorer 6中accesing top[i][j]時引發安全錯誤。任何想法如何解決這個在IE6上?

謝謝!

回答

0

的同事,找到了解決辦法:去了樹來代替。

var getLastParent = function (baseWindow, topWindow) { 
    var lastParent, nextParent; 
    lastParent = nextParent = baseWindow; 
    while (nextParent != topWindow && nextParent != nextParent.parent) { 
     lastParent = nextParent; 
     nextParent = nextParent.parent; 
    } 
    return lastParent; 
}; 
var findWindow = function (baseWindow, topWindow) { 
    var lastParent = getLastParent(baseWindow, topWindow); 
    for (var i = 0; i < topWindow.length; i++) { 
     if (topWindow[i] == lastParent) 
      return i; 
    } 
    return -1; 
}; 
1

看起來IE不滿意您訪問try[i]的任何屬性,因爲它是不同安全上下文的一部分,即使您正在訪問的屬性與腳本屬於同一安全上下文。

你可能在這裏運氣不好。但是,你有沒有嘗試過更換:

  • 嘗試[I]
  • 試試[i] [j]

有:

  • try.frames [I]
  • try.frames [I] .frames [j]的

這應該是 或多或少相同。這是一個長鏡頭,我不知道它是否會起作用,但它可以。

+0

是的,我試過使用幀對象,但它有相同的效果。 – juandopazo 2010-05-03 12:52:12