1

我在以下代码中收到跨站点脚本错误。

Javascript

 function resizeIframe(ifRef) 
            {
                var ifDoc;
                //alert(ifRef);

                try
                { 
                    ifDoc = ifRef.contentWindow.document.documentElement; 
                }
                catch( e )
                {
                   alert(e);
                    try
                    { 
                    ifDoc = ifRef.contentDocument.documentElement; 
                    }
                    catch( ee ){
                             alert(ee);
                          } 
                }
                //var doc = ifRef.height;
                //alert(doc);
                if(ifDoc)
                {
                    ifRef.height = 1; 
                    ifRef.style.height = ifDoc.scrollHeight+'px';               
                }
            }

框架

<iframe onload="resizeIframe(this)" style="margin-bottom: 16px;" src="ourteamnav/first.php" frameborder="0" scrolling="no" width="597" height="240"></iframe>

错误如下

前面' :

Mozilla Firefox:错误:访问属性“文档”的权限被拒绝

Google Chrome: TypeError:无法读取未定义的属性“documentElement”

Internet Explorer:TypeError:权限被拒绝

对于 'ee' :

Mozilla Firefox:错误:访问属性“documentElement”的权限被拒绝

Google Chrome: TypeError:无法读取 null 的属性“documentElement”

Internet Explorer:错误:访问被拒绝。

我认为它无法以一般方式解决,因为它正在发生,因为域指向另一个域。因此,任何人都会指导我在不使用 Javascript 的这些属性contentDocument.documentElementcontentWindow.document.documentElement根据其内部内容动态调整 iframe 内容的大小的情况下解决它。

谢谢

4

2 回答 2

3

除了Christophe的回答之外,我想指出(遗憾的是)postMessage不适用于所有浏览器。

幸运的是,Josh Fraser已经提供了向后兼容的 window.postMessage() 版本。它检查浏览器是否支持postMessage- 方法。如果是这样,它会使用它。如果不是,它使用URL(来自 iframe 和父级)来传递数据。

现在您可以使用以下方法让两个窗口相互“对话”:

XD.postMessage(msg, src, frames[0]);
XD.receiveMessage(function(message){
    window.alert(message.data + " received on "+window.location.host);
}, 'URL');

只需确保您正确阅读了文档,因为必须正确设置配置。

于 2013-02-23T20:09:04.013 回答
2

As you say, this is a cross-domain issue.

If you have control on both pages you can use postMessage to exchange information between the two pages.

Some references:

于 2013-02-23T19:28:07.470 回答