2010-10-20 1 views
2

создать новую IFRAME, добавьте его к телу, а затем попытаться получить его «документа» переменных, например:получить переменную документа iframe из встроенного плагина jquery?

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 дает мне «Access denied».

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

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

    } 
})(jQuery); 

Странно, что оба способа работают в IE самостоятельно, для отладки была вставлена ​​проверка браузера.

Я предполагаю, что это какая-то проблема с областью, с 'документ' не доступен из анонимной функции или что-то в этом роде. Любые указатели?

ответ

1

Я не могу воспроизвести это здесь. Оба способа работают отлично в IE6 и IE7 здесь с jquery 1.4.2 и 1.4.3, даже без проверки браузера.

НТН

Примечание стороны:
По некоторым причинам [только на Linux, только IE7, IE6 это хорошо!], Как только я добавил, например, doc.write() (doc.open(), ...) в любом месте, даже после некоторого setTimeout, каждый второй раз, когда я перезагружаю страницу, iframe не появляется на странице для начала. Тогда $ iframe [0] все еще был объектом, но $ iframe [0] .contentWindow не был определен (также .readyState, .src, ...), что привело к «Unspecified Error» с вышеуказанным кодом в любом варианте, даже без jquery и статический iframe. Тем не менее, он не воспроизводится в Windows.