2013-02-19 2 views
0

비슷한 질문에 대한 많은 답변을 보았지만 내 질문에 대한 답을 찾지 못했습니다. html 페이지가 있습니다.gwt에서 javascript 함수를 호출하십시오. HTMLPane

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

코드

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

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

GWT

에서 그러나 아무것도 작동하지 않습니다. 는 다른 위치에서 함수를

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

으로 함수를 정의하고 정의했지만, 아무것도 도움이되지 않습니다. 오류를 찾을 수 있도록, 또는이

+0

SmartClient의 smartGWT를 사용 중이라는 것을 알려주는 데 도움이됩니다. HTMLPane [http://www.smartclient.com/docs/8.3/a/b/c/go.html#class..HTMLPane]에 대한 참조를 찾으려면 시간이 좀 걸렸습니다. _does_이 (가) 작동한다는 것을 어떻게 압니까? 페이지 본문에서 hide 함수를 호출 할 수 있습니까? gwt 코드가 내용 URL을 설정하면 페이지가로드되는 것을 보시겠습니까? 'someMethod'를 호출하기 전에 행이 실행됩니까? –

답변

0

hide() 불가능하다고 말 해주세요 것은 window —의 구성원, 호출 네이티브 메소드에 $wnd$doc 교체입니다 예 : 당신이에 부착 주장하는 경우

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

document는 변하지 기본 방법을두고 있지만, 기능 할당을 보정 :

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

문제는 H이다 ContentsType.PAGE을 사용할 경우 TMLPane은 iframe을 사용합니다.
그래서 hide()은 iframe의 하위 창의 함수입니다.
ContentsType.PAGE을 사용해야하는 경우 다음과 같이 작동합니다. "숨기기/텍스트"와 같은 너무 일반적인 이름을 사용

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

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(); 
}-*/; 
는 다른 스크립트/물체와의 충돌로 이어질 이상한 동작이 발생할 수 있습니다.

관련 문제