2013-10-07 2 views
0

Я пытаюсь сделать так:Как получить содержимое iframe с помощью запроса GWT?

$("iframe.cke_dialog_ui_input_file").contents() 

но он возвращает:

< #document(gquery, error getting the element string representation: (TypeError) @com.google.gwt.dom.client.DOMImplMozilla::toString(Lcom/google/gwt/dom/client/Element;)([JavaScript object(8570)]): doc is null)/> 

Но документ не пустой!

Помогите мне пожалуйста решить эту проблему :(

UPD HTML код:.

<iframe id="cke_107_fileInput" class="cke_dialog_ui_input_file" frameborder="0" src="javascript:void(0)" title="Upload Image" role="presentation" allowtransparency="0"> 
<html lang="en" dir="ltr"> 
<head> 
<body style="margin: 0; overflow: hidden; background: transparent;"> 
<form lang="en" action="gui/ckeditor/FileUploadServlet?CKEditor=gwt-uid-7&CKEditorFuncNum=0&langCode=en" dir="ltr" method="POST" enctype="multipart/form-data"> 
<label id="cke_106_label" style="display:none" for="cke_107_fileInput_input">Upload Image</label> 
<input id="cke_107_fileInput_input" type="file" size="38" name="upload" aria-labelledby="cke_106_label"> 
</form> 
<script> 
window.parent.CKEDITOR.tools.callFunction(90);window.onbeforeunload = function() {window.parent.CKEDITOR.tools.callFunction(91)} 
</script> 
</body> 
</html> 
</iframe> 
+0

Не могли бы вы поделиться своим кодом? – fascynacja

+0

Вы используете UiBinder? Если это так, вы не можете получить доступ к элементам до тех пор, пока они не будут отображены в представлении. В противном случае вы должны использовать @UiField IFrameElement iFrameElement. И затем используйте $ (iFrameElement) .contents(). Я столкнулся с этой точной проблемой. –

ответ

1

Метод contents() возвращает HTMLDocument, так что обычно вы должны найти <body> манипулировать им.

$("iframe.cke_dialog_ui_input_file").contents().find("body"); 

Общей ошибкой является запрос к iframe, прежде чем он была полностью загружена, поэтому запишите код с использованием Timer, Scheduler или GQuery.delay(). Например:

$("iframe.cke_dialog_ui_input_file") 
    .delay(100, 
    lazy() 
     .contents().find("body") 
     .css("font-name", "verdana") 
     .css("font-size", "x-small") 
    .done()); 
Смежные вопросы