从gwt调用javascript函数。 HTMLPane

时间:2013-02-19 17:29:43

标签: javascript gwt smartgwt jsni

我已经看到很多类似问题的答案,但没有找到我的问题的答案。 有一个HTML页面。

<body>
  <div id="text">some text</div>
  <script>
     function hide()
     {
         document.getElementById("text").style.display = "none";
     }
  </script>
</body>

gwt中的代码

HTMLPane panel = new HTMLPane();
panel.setContentsType(ContentsType.PAGE);
panel.setContentsURL("pages/index.html");

public native void someMethod(HTMLPane panel)/*-{
    $doc.hide();
}-*/;

但没有任何作用。 试图将函数定义为

document hide = function hideF()
{
    document.getElementById("text").style.display = "none";
}

并在不同的位置定义一个函数,但没有任何帮助。 请帮助找到错误,或者说这是不可能的

2 个答案:

答案 0 :(得分:0)

hide()window的成员 - 在调用本机方法中将$doc替换为$wnd,即:

public native void someMethod(HTMLPane panel)/*-{
    $wnd.hide();
}-*/;

如果您坚持将其附加到document,请保持原始方法不变,但更正功能分配:

document.hide = function()
{
    document.getElementById("text").style.display = "none";
}

答案 1 :(得分:0)

问题是,HTMLPane在使用ContentsType.PAGE时使用iframe 因此,hide()是iframe中子窗口的函数 如果您必须使用ContentsType.PAGE,请执行以下操作。

HTMLPane panel = new HTMLPane();
panel.setContentsType(ContentsType.PAGE);
panel.setContents("<iframe id='" + "id_internal_panel_1" + "' src='" + "pages/index.html" + "' style='border:none'/>");

// above use of iframe instead of using the one created by HTMLPane, could cause styling and other issues

// following did not work for me
// panel.setContentsURL("pages/index.html");
// panel.getElement().setId("id_internal_panel_1");
// panel.getElement().setPropertyString("name", "id_internal_panel_1");
// panel.getElement().setPropertyString("id", "id_internal_panel_1");

IButton button = new IButton("Hide");
button.addClickHandler(new ClickHandler() {
    public void onClick(ClickEvent clickEvent) {
        someMethod();
    }
});

public native void someMethod()/*-{
    $doc.getElementById("id_internal_panel_1").contentWindow.hide();
    // $wnd.document.getElementById("id_internal_panel_1").contentWindow.hide();

    // can use following with panel.setContentsURL("pages/index.html");, if ContentsType is not set to ContentsType.PAGE
    // $wnd.hide();
}-*/;

Set an ID to an iframe in a HtmlPane
Calling javascript function in iframe

使用像“hide / text”这样的通用名称可能会导致与其他脚本/对象的冲突,并导致奇怪的行为。