1

我不认为这是可能的,但今天早上我讨厌IE6两倍。访问IFrame的contentWindow.document会导致IE6上的访问被拒绝

请不要误解我为什么,但我会尽力解释我们想要达到的目标。 我们有2个应用程序在运行,比如说APP1 & APP2,它们都在相同域。 APP1包含一个托管在APP2上的JavaScript文件。这个JS文件将:

  1. 创建(使用使用document.createElement)
  2. 设置的IFrame到APP2的根(其中产生一些HTML)源一个IFrame;
  3. 一个div添加到APP1
  4. 的身体
  5. 阅读iFrame的内容(所以APP2的生成HTML)
  6. 集这个内容作为DIV的innerHTML(3)

所以最后在APP1中,我们有一个标题,其内容由APP2生成,而屏幕上没有IFrame。

问题在于步骤4;这对于IE6以外的所有浏览器都可以正常工作(这可能是Web开发中最常用的语句吗?)。 尝试访问iframe的contentWindow.document时出现JS错误:“访问被拒绝”。我不是专家,但据我了解,如果两个应用程序不在同一个域中,但它们是(dev.echnet/APP1 & dev.echnet/APP2),则会得到此错误。

这是我使用用于上述步骤的代码(掏出未如果不是IE6执行的东西): (1),(2)&(3):

var elIf; 
$().ready(function() 
{ 
    elIf = document.createElement('<iframe name="uhframename">'); 
    elIf.setAttribute('id','idUhFrame'); 
    document.body.appendChild(elIf); 

var uhDiv = document.createElement('div'); 
document.body.appendChild(uhDiv); 

elIf.src='dev.echnet/APP1?nocache='+Math.random(); 
getText(); 

}

(4)

function getText() { 
     var sContent = ""; 
     if (elIf.contentWindow.document.body) { // access denied on elIf.contentWindow.document 
      ... 
     } 
} 

我GOOGLE了很多,尝试了多种可能性,我发现(也SO),但他们都不来解决这个问题。

我还试图明确上的IFrame通过设置它的源设置域以这样的:

“的javascript:(函数(){document.open(); document.domain的= \'dev.echnet \'; document.close();})()”

,但我不能完全肯定这是否有任何影响,因为我设置源到别的东西了几步进一步。无论如何,既然它是同一个域名,它应该不重要?

希望得到一些帮助或有人击落所有IE6用户(现在是一个可行的任务),所以我可以跳过这个任务:-)。

+0

不知道如果这能帮助:http://stackoverflow.com/questions/151362 –

回答

0

经过一些与这里的另一个问题的工作后,我想出了这个解决方案。

似乎.document并不总是必要的。

http://jsfiddle.net/sTkVR/4/

我使用的是Chrome和它不与.document工作,但工作方式和出的魅力吗

+0

3n1gm4:tx,我会尝试这一点,但上面的解决方案工作正常是铬,但不是在IE6。 –

+0

3n1gm4:正如所料,这没有什么区别。无论如何。 –