我有一个像这样的HTML对象元素:
<object title="Search results as XML" standby="Loading XML document..." type="text/xml"
data="/__CA25761100195585.nsf/WebPrintListingXML?OpenAgent&date1=01/06/2009"
width="100%" height="100%" border="0" name="resultIFrame" id="resultIFrame">
Error: could not embed search results.
</object>
我也有这个javascript函数(为调试添加了alert()调用):
function getFrameByName(fParent,fName)
{
var fArray=fParent.frames;
if (!fName) return;
if (fArray) {
if (fArray.length) {
for (var i=0; i<fArray.length; i++) {
alert('loop '+i);
if (fArray[i]) {
if (fArray[i].name==fName) return fArray[i];
}
}
}
}
var tmp=document.getElementsByName(fName);
if (tmp[0]) {
alert('returning '+tmp[0]);
if (!(tmp[0].contentWindow)) alert('contentWindow is null');
return tmp[0].contentWindow;
}
}
最后,此按钮用于打印Object元素的内容:
<input type="button" value="Print" name="printBtn"
onclick="getFrameByName(window,'resultIFrame').print();">
该按钮在Firefox中完美运行。
Opera虽然打印主文档而不仅仅是对象,但已经足够好了。
IE7给出以下错误详情:
行:57
Char:1
错误:'undefined'为null或不是对象
第57行是HTML源代码中按钮的“input”标签的开头位置。
感谢JS函数中的alert('contentWindow is null')
调用,我知道我在IE中获得的对象没有contentWindow属性。
我尝试将object
代码更改为iframe
代码。这会更改JS行为,但会导致忽略height
属性等其他问题,并且内容不会显示
坚持使用object
标签,如何在IE7中获取此对象的窗口?
答案 0 :(得分:2)
如果您知道iframe的名称,获取其窗口对象的最简单方法是调用window.frames [frameName]。这将返回对窗口对象的引用,而不是iframe
答案 1 :(得分:0)
我知道这个问题已经过时了,但这里有一些我的发现:
使用window.frames[frameName]
的方法在firefox和chrome中运行良好,但在IE中包含了许多奇怪的怪癖。
在ff和chrome中,您可以通过window.frames[frameName].document
访问文档元素,您只需要将name属性添加到对象标记。
但在IE中(我的情况是8)你需要拨打contentDocument
而不是document
。没关系,但是这里有一些非常奇怪的东西,如果有另一个完全无关的对象,其ID等于对象标签的名称,IE会混淆并返回一个html集合,同时包含ID元素和命名对象。然后,您需要从列表中过滤掉对象,以使用如下索引访问contentDocument属性:window.frames[frameName][1].contentDocument
您可以使用jquery获取文档的内容:$(window.frames[frameName].document).contents().find("selector");
哇,到目前为止,这就是我所拥有的一切。我认为最好的方法是检查'frame'是否包含IE的属性'contentDocument',而其他人则访问正常的'document'属性。