从iFrame访问外部JSNI函数

时间:2013-09-12 11:36:38

标签: gwt file-upload smartgwt jsni

我们正在使用SmartGWT LGPL 4.0,现在我们正在使用隐藏的iFrame(在与DynamicForm相同的画布中定义)来回调文件上传和回调。在上传文件后来自服务器的响应中,我们发送了一些javascript测试代码,例如正在执行的警报。当尝试访问在与public static相同的DynamicForm文件中定义的JSNI方法时,会出现问题。在作为响应发回的javascript代码中,我们通过“window.parent.document.callbackMethod()”调用该方法,但是我们收到错误,说明函数未定义。似乎“window.parent.document”不是访问SmartGWT生成的DOM中的外部文档的正确方法。

在与DynamicForm相同的画布中定义隐藏的iFrame和回调方法是否正确?

有一些代码:

1.-客户:

....
NamedFrame iFrame = new NamedFrame(nombreIFrame);
iFrame.setVisible(false);
iFrame.setWidth("1px");
iFrame.setHeight("1px");
.....
dynamicForm = new DynamicForm();
dynamicForm.setTarget(nombreIFrame);
dynamicForm.setAction("rest/archivo/add");
dynamicForm.setCanSubmit(true);
....

//JSNI
public native void miFuncion() /*-{
    $wnd.alert('Hello');
}-*/;

2.-服务器1(工作正常)

...
@Produces({ MediaType.TEXT_HTML })
public String upload(...){
...
return "<script>alert('Hello')</script>"
}

3.-服务器2(它不起作用)

...
@Produces({ MediaType.TEXT_HTML })
public String upload(...){
...
return "<script>window.parent.document.miFuncion()</script>"
}

祝你好运

  • 浏览器:firefox 20.0
  • O.S:Ubuntu 11.10
  • SmartClient版本:v9.0p_2013-07-14 /仅限LGPL开发(内置2013-07-14)

1 个答案:

答案 0 :(得分:2)

您必须导出您的方法:

var that = this;    $ wnd.miFunction = $ entry(function(){      那@ my.app.client.MyClass :: miFunction()();    });

请参阅http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html#calling(有static方法的示例,上面的实例方法示例)