访问 IFrame 的 contentWindow.document 在 IE6 上给出"访问被拒绝"



我不认为这是可能的,但我现在比早上更讨厌IE6了。

请不要烦我为什么,但我会尽力解释我们正在努力实现的目标。我们有两个应用在运行,比方说APP1 &APP2,两者都在同一域上。APP1包含了一个托管在APP2上的JavaScript文件。这个JS文件将:
  1. 创建IFrame(使用document.createElement)
  2. 将IFrame的源设置为APP2的根目录(生成一些HTML);
  3. 添加div到APP1
  4. 读取IFrame的内容(即APP2生成的HTML)
  5. 将此内容设置为div的innerHTML (3)

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

问题出在步骤4;这对于除了IE6之外的所有浏览器都是有效的(这可能是web开发中最常用的句子吗?)我得到一个js错误时,试图访问contentWindow。iframe的文件:"访问被拒绝"。我不是专家,但据我所知,如果两个应用程序不在同一域名上,但它们是(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
           ...
        }
}

我在谷歌上搜索了很多,尝试了很多我发现的可能性(也在SO上),但似乎没有一个能解决这个问题。

我还尝试通过将其源设置为:

在IFrame上显式设置域。

" javascript:(函数(){document.open (); document.domain = "dev.echnet ";document.close ();}) ()"

,但我不确定这是否有任何影响,因为我将源设置为其他几个步骤。不管怎样,既然是同一个域,应该无所谓吧?

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

在对这里的另一个问题进行了一些工作之后,我想出了这个解决方案。

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

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

我使用的是chrome,它不能与.document一起工作,但没有它就像一个魅力

相关内容

  • 没有找到相关文章

最新更新