我在以下代码中收到Cross Site Scripting错误。
的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';
}
}
I帧
<iframe onload="resizeIframe(this)" style="margin-bottom: 16px;" src="ourteamnav/first.php" frameborder="0" scrolling="no" width="597" height="240"></iframe>
错误正在跟随
对于'e':
Mozilla Firefox:错误:访问属性'文档'的权限被拒绝
Google Chrome: TypeError:无法读取未定义的属性'documentElement'
Internet Explorer: TypeError:权限被拒绝
对于'ee':
Mozilla Firefox:错误:访问属性'documentElement'的权限被拒绝
Google Chrome: TypeError:无法读取属性'documentElement'为null
Internet Explorer:错误:访问被拒绝。
我认为由于域名指向另一个域而无法通过一般方式解决。因此,任何人都可以指导我解决此问题,而无需使用Javascript contentDocument.documentElement
或contentWindow.document.documentElement
的这些属性来根据内部内容动态调整Iframe内容的大小。
由于
答案 0 :(得分:3)
除Christophe的答案外,我还想指出(遗憾的是)postMessage
并不适用于所有浏览器。
幸运的是,Josh Fraser已提供a backwards compatible version of window.postMessage()。它检查浏览器是否支持postMessage
- 方法。如果是的话,就会使用它。如果没有,它会使用网址(来自iframe和父级)来传递数据。
现在你可以使用以下方法让两个窗口和#34;谈话&#34;彼此:
XD.postMessage(msg, src, frames[0]);
XD.receiveMessage(function(message){
window.alert(message.data + " received on "+window.location.host);
}, 'URL');
请确保正确阅读文档,因为必须正确设置配置。
答案 1 :(得分:2)
正如您所说,这是一个跨域问题。
如果您对两个页面都有控制权,则可以使用postMessage在两个页面之间交换信息。
一些参考文献: