2010-12-04 14 views
5

GWTによって生成された.nocache.jsスクリプトファイルにパラメータを渡し、onModuleLoad関数で評価する方法はありますか?これと同じように:GWTブートストラップの.nocache.jsスクリプトにパラメータを渡す

<script type="text/javascript" src="application/Application.nocache.js?appId=461333815262909"></script> 

ホスト・ページのURLは、完全に内部の作業GWTのものから分離し、そのホストページのクエリパラメータとしてのAppIDパラメータを渡すとWindow.Location.getParameterでそれにアクセスすることはできませんする必要がありますオプション。私はそのようなパラメータを隠すことができることを知っています。隠された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メタタグを使用する方法です。次のようにメタタグを追加し、GWTのスクリプトを呼び出すHTMLページで

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

次のように続いて、あなたのモジュールのエントリポイントで、それを解析:

@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()); 
     } 
    } 
} 

は確かに、スクリプトタグのsrc URLに引数を渡すのと同じくらい単純ではありませんが、スクリプトのタグのソース属性を人為的に再解析するよりも、エラーが発生しにくく、ドキュメントの内容にdivを隠すよりもはるかにクリーンだと思います。

関連する問題