2010-12-04 3 views
5

GWT에 의해 생성 된 .nocache.js 스크립트 파일에 매개 변수를 전달하고 onModuleLoad 함수에서 매개 변수를 평가하는 방법이 있습니까? 그래서 같이 :GWT 부트 스트랩 .nocache.js 스크립트에 매개 변수 전달

호스트 페이지 URL은 완전히 GWT 물건이 너무 호스트 페이지에 대한 쿼리 매개 변수로 APPID 매개 변수를 전달하고 Window.Location.getParameter으로 접근, 내부 작업을 분리해야
<script type="text/javascript" src="application/Application.nocache.js?appId=461333815262909"></script> 

가 아니다 선택권. 나는 그러한 매개 변수를 숨길 수 있다는 것을 안다. 숨겨진 DIV를 작성한 다음 스크립트에서 쿼리를 수행 할 수 있지만 가능하다면 호스트 페이지에 더 이상 의존하지 않아야합니다.

감사합니다. Lisa

답변

2

아니요, 그러나 this article은 서버의 매개 변수를 페이지로드시 클라이언트 측 스크립트로 전달할 때 유용 할 수 있습니다.

2

는 대한 GWT의 네이티브 지원이 없어 보입니다, 그러나 나는 최근에 다음과 같은 해결책을했다 : 스크립트가 항상 명명 규칙 "/<moduleName>.nocache.js", 당신은 모든 <script> 요소를 가져올 수를 따른다고 가정

호스트 페이지에서 src 속성에서 이것을 참조하는 호스트 페이지를 검색하십시오. 그런 다음 URL 인코딩 된 특성을 끌어 올 수 있습니다.

첫 번째 매개 변수로 GWT.getModuleName()을 사용하여 구현 한 샘플 구현입니다.

/** 
* Fetches a parameter passed to the module's nocache script. 
* 
* @param moduleName the module's name. 
* @param parameterName the name of the parameter to fetch. 
* @return the value of the parameter, or <code>null</code> if it was not 
* found. 
*/ 
public static native String getParameter(String moduleName, String parameterName) /*-{ 
    var search = "/" + moduleName + ".nocache.js"; 
    var scripts = $doc.getElementsByTagName("script"); 
    for(var i = 0; i < scripts.length; ++i) { 
     if(scripts[ i ].src != null && scripts[ i ].src.indexOf(search) != -1) { 
      var parameters = scripts[ i ].src.match(/\w+=\w+/g); 
      for(var j = 0; j < parameters.length; ++j) { 
       var keyvalue = parameters[ j ].split("="); 
       if(keyvalue.length == 2 && keyvalue[ 0 ] == parameterName) { 
        return unescape(keyvalue[ 1 ]); 
       } 
      } 
     } 
    } 
    return null; 
}-*/; 

개선을위한 제안을 환영합니다.

3

숨겨진 div에 정보를 숨기지 않고 인수를 전달하는 쉬운 방법은 HTML 메타 태그를 사용하는 것입니다. ,

@Override 
public void onModuleLoad() { 
    NodeList<Element> metas = Document.get().getElementsByTagName("meta"); 
    for (int i=0; i<metas.getLength(); i++) { 
     MetaElement meta = (MetaElement) metas.getItem(i); 
     if ("appId".equals(meta.getName())) { 
      Window.alert("Module loaded with appId: " + meta.getContent()); 
     } 
    } 
} 

부여 :

<html> 
    <head> 
    <meta name="appId" content="461333815262909"> 
    ... 

을 그리고, 모듈의 진입 점에서, 다음과 같이 구문 분석 다음 GWT 스크립트를 호출하는 HTML 페이지에서

는 다음과 같이 메타 태그를 추가 스크립트 태그의 src URL에 인수를 전달하는 것만 큼 간단하지 않지만 문서 내용에 div가 숨겨져 있고 스크립트 태그의 소스 속성을 인위적으로 다시 파싱하는 것보다 오류가 적은 것보다 조금 더 깔끔하다고 믿습니다.