从jquery插件中获取iframe的文档变量?

时间:2010-10-20 01:22:37

标签: javascript jquery jquery-plugins

我创建了一个新的iframe,将其附加到body,然后尝试获取其“ document ”变量,如下所示:

var $iframe = $( "<iframe name='my-frame'>" );
$iframe.appendTo( $("body") );

var doc = null;

if($.browser.msie){
    doc = window.frames["my-frame"].document; // 'access denied' in IE
} else {
    doc = $iframe[0].contentWindow.document;
}
doc.close();

这可以很好地独立工作,但是一旦我尝试在jQuery插件中执行它,IE就会给我“访问被拒绝”。

(function($) {
    $.fn.jqprint = function (options) {

 // the above code fails in IE with above error when inserted here

    }
})(jQuery);

奇怪的是,两种方式都在IE中自行工作,插入浏览器检查以进行调试。

我猜它是某种范围问题,“ document ”无法从匿名函数或类似的东西中访问。有什么指针吗?

1 个答案:

答案 0 :(得分:1)

我不能在这里重现这一点。即使没有浏览器检查,这两种方式在IE6和IE7中都能正常使用jquery 1.4.2和1.4.3。

HTH

旁注:
出于某种原因[只在Linux上,只有IE7,IE6才好!],我加上例如doc.write()(doc.open(),...)在任何地方,甚至在一些setTimeout之后,大约每一次我重新加载页面时,iframe都不会出现在页面上。那么$ iframe [0]仍然是一个对象,但$ iframe [0] .contentWindow是未定义的(也是.readyState,.src,...)导致出现“未指定的错误”,上面的代码在任何一个变体中,即使没有涉及的jquery和静态iframe。但是,在Windows上无法重现。