访问IFrame的contentWindow.document会在IE6上显示“Access is Denied”

时间:2011-11-16 16:27:16

标签: javascript internet-explorer-6 cross-domain access-denied

我认为这不可能,但今天早上我讨厌IE6两倍。

请不要误解我的原因,但我会尝试解释我们想要实现的目标。 我们有2个应用程序正在运行,比方说APP1& APP2,两者都在相同的域。 APP1包含一个托管在APP2上的JavaScript文件。这个JS文件将:

  1. 创建IFrame(使用document.createElement)
  2. 将IFrame的源设置为APP2的根(生成一些HTML);
  3. 在APP1的正文中添加div
  4. 阅读IFrame的内容(因此生成的APP2的HTML)
  5. 将此内容设置为div(3)
  6. 的innerHTML

    所以最后在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
               ...
            }
    }
    

    我已经搜索过很多东西并尝试了很多我发现的可能性(也是在SO上),但它们似乎都没有解决这个问题。

    我还尝试通过将其来源设置为明确地在IFrame上设置域:

      

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

    但我不确定这是否有任何影响,因为我将源设置为更进一步的其他内容。无论如何,既然它是同一个域,它应该没关系?

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

1 个答案:

答案 0 :(得分:0)

在此处讨论了另一个问题之后,我想出了这个解决方案。

似乎并不总是需要.document

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

我正在使用Chrome,它不能与.document一起使用,但它的功能就像一个魅力