3

Google Chrome 拡張機能のリンカーを作成しています。gwt.xml ファイルに、ユーザー エージェント プロパティに関する記述を追加する必要があります。Firefox の場合、パターンは次のとおりです。

<set-property name="user.agent" value="gecko1_8"/>

ただし、 Google Chrome 固有のコードに対応する値の名前が見つかりません。

4

2 に答える 2

3

サポートされているユーザーエージェントのリストは次のとおりです。紛らわしいことに、クロム用のものは「Safari」です。(これはおそらく、これらのブラウザーの両方がWebkitベースであることが原因ですが、私は間違っている可能性があります。)

<set-property name="user.agent" value="safari"/>
于 2012-06-26T19:26:37.923 に答える
3

GWT は Chrome と Safari を同じように扱うため、両方をカバーする "safari" エージェントの値しかありません。そのため、ユーザー エージェントの構成だけを使用してこれを行うことはできません。

ただし、GWT の遅延バインディング メカニズムには、「プロパティ プロバイダー」を作成することにより、実行時にのみ傍受されるプロパティに合わせてコードを調整する方法があります。これは基本的に、.gwt.xml でこれを行う方法です。

  <define-property name="is.really.chrome" values="false,true"/>

  <property-provider name="is.really.chrome"><![CDATA[
      var ua = navigator.userAgent.toLowerCase();
      if (ua.indexOf("applewebkit") != -1) {
        if (ua.indexOf("chrome") != -1) {
          return true;
        } 
      } 
      return false;
  ]]></property-provider>

  <replace-with
      class="some.implementation.of.interface">
    <when-type-is class="some.interface.used.with.GWT.create"/>

    <when-property-is name="user.agent" value="safari"/>
    <when-property-is name="is.really.chrome" value="true"/>
  </replace-with>

上記の上部で行うことは、新しいプロパティ「is.really.chrome」を定義することです。その値は<property-provider>、アプリケーションのロード時にブロック内の Javascript コードによって決定されます (このコードは GWT の起動シーケンスにインライン化されます)。

2 番目の部分である は<replace-with>、この新しいプロパティの値に敏感な置換規則を定義する方法を示しています。これ (および同様のその他の規則) により、GWT コンパイラーはコードの追加の順列を作成します。これは、Safari バージョンとほとんど同じですが、Chrome のカスタマイズが含まれています。

この記事は、この件に関して私が見つけた最高のものの1つです: http://css.dzone.com/news/understanding-gwt-compiler

于 2012-06-26T19:35:54.837 に答える