読者です 読者をやめる 読者になる 読者になる

auの一部の端末のFlash Playerは9ストップ以上のグラデーションを表示できない

FlashLite

久しぶりにブログを更新したと思ったら、Flash/FlashLiteのような死滅しつつある技術について書いていてすみません。完全にチラシの裏です。

auの一部のFlashLite Playerには9ストップ以上のグラデーションを表示できないという制限があるようです。僕はW43Hで確認しました。

例えば、swfmill形式のXMLで表現すると次のようなFlash。

<?xml version="1.0" encoding="UTF-8"?>
<swf version="4" compressed="0">
  <Header framerate="15" frames="1">
    <size>
      <Rectangle left="0" right="4800" top="0" bottom="4800"/>
    </size>
    <tags>
      <SetBackgroundColor>
        <color>
          <Color red="102" green="204" blue="153"/>
        </color>
      </SetBackgroundColor>
      <DefineShape objectID="1">
        <bounds>
          <Rectangle left="0" right="4800" top="0" bottom="4800"/>
        </bounds>
        <styles>
          <StyleList>
            <fillStyles>
              <LinearGradient>
                <matrix>
                  <Transform transX="0" transY="0"/>
                </matrix>
                <gradientColors>
                  <GradientItem position="0"><!-- 1 -->
                    <color>
                      <Color red="237" green="41" blue="41"/>
                    </color>
                  </GradientItem>
                  <GradientItem position="18"><!-- 2 -->
                    <color>
                      <Color red="238" green="43" blue="41"/>
                    </color>
                  </GradientItem>
                  <GradientItem position="27"><!-- 3 -->
                    <color>
                      <Color red="239" green="51" blue="40"/>
                    </color>
                  </GradientItem>
                  <GradientItem position="35"><!-- 4 -->
                    <color>
                      <Color red="242" green="65" blue="39"/>
                    </color>
                  </GradientItem>
                  <GradientItem position="42"><!-- 5 -->
                    <color>
                      <Color red="247" green="85" blue="37"/>
                    </color>
                  </GradientItem>
                  <GradientItem position="48"><!-- 6 -->
                    <color>
                      <Color red="252" green="110" blue="35"/>
                    </color>
                  </GradientItem>
                  <GradientItem position="51"><!-- 7 -->
                    <color>
                      <Color red="255" green="123" blue="34"/>
                    </color>
                  </GradientItem>
                  <GradientItem position="99"><!-- 8 -->
                    <color>
                      <Color red="255" green="231" blue="23"/>
                    </color>
                  </GradientItem>
                  <GradientItem position="255"><!-- 9 -->
                    <color>
                      <Color red="174" green="113" blue="255"/>
                    </color>
                  </GradientItem>
                </gradientColors>
              </LinearGradient>
            </fillStyles>
            <lineStyles/>
          </StyleList>
        </styles>
        <shapes>
          <Shape>
            <edges>
              <ShapeSetup x="0" y="0" fillStyle1="1"/>
              <LineTo x="240" y="0"/>
              <LineTo x="0" y="240"/>
              <LineTo x="-240" y="0"/>
              <LineTo x="0" y="-240"/>
              <ShapeSetup/>
            </edges>
          </Shape>
        </shapes>
      </DefineShape>
      <PlaceObject2 replace="0" depth="1" objectID="1">
        <transform>
          <Transform transX="0" transY="0"/>
        </transform>
      </PlaceObject2>
      <ShowFrame/>
      <End/>
    </tags>
  </Header>
</swf>

制限のある端末でもGradientItemを一つ削って8ストップにすれば表示できます。

ケータイもFlashLiteもFlashも基本的にレガシーな技術なので、他のキャリアの端末で同じ制限があるのかまでは深追いしていませんが、auの端末でも9ストップ以上のグラデーションを表示できる端末があることは確認しました。

FlashLiteのような絶滅しつつある技術を使ってWebアプリケーションを作る機会はもうないと思いますが、注意したいですね。