L
次のページ
H
前のページ
U
上のページ

« QuickTime ムービーを貼付けるときのマークアップで困った | Main | QuickTime ムービーを貼付けるときのマークアップを更になんとかする(多分最終回) »

2008年10月02日

QuickTime ムービーを貼付けるときのマークアップをなんとかする

昨日の続きです。最もましなパターンでも Firefox でインライン表示できませんでしたがそれを表示させる方法です。


昨日の「僕は見ていた : QuickTime ムービーを貼付けるときのマークアップで困った」では次の結論になりました。QuickTimemov ファイルに対して非標準の embed 要素を使わず object 要素を使って Safari, Firefox そして Internet Explorer 6 で共通して QuickTime のプラグインが使える標準準拠のマークアップはありません。次のパターンがもっともましですが Firefox だけは mov ファイルへのリンクで表示されてしまいます。

<object height="16" width="170"
  codebase="http://www.apple.com/qtactivex/qtplugin.cab"
  classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B"
  >
    <param name="controller" value="true" />
    <param name="autoplay" value="false" />
    <param name="src" value="http://homepage.mac.com/yuji_okamura/iSawIt/attach/2008-09-21/ToySymphony.mov" />
    <a href="http://homepage.mac.com/yuji_okamura/iSawIt/attach/2008-09-21/ToySymphony.mov">ToySymphony.mov</a>
</object>

因に Opera では昨日試した全てのパターンで OK でした。嬉しいことにとりあえず Opera は気にしなくてもいいです。

さて、問題は Firefox です。

Firefox の場合、classid 属性が無く data 属性があればインラインで表示できます。ということは、Firefox に限って classid 属性を取り去り、data 属性を入れればいいってことです。そうです JavaScript の出番です。仮に JavaScript が無効にされていても mov ファイルへのリンクは見えているのですから、発信側としての責務は果たした、あとは受信側でよろしくと胸を張って言えそうです。

というわけでそういうスクリプトを添えて次のようにすれば OK です。

<object id="MovObject" height="16" width="170"
  codebase="http://www.apple.com/qtactivex/qtplugin.cab"
  classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B"
  standby="Now Loading..."
  >
    <param name="controller" value="true" />
    <param name="autoplay" value="false" />
    <param name="src" value="http://homepage.mac.com/yuji_okamura/iSawIt/attach/2008-09-21/ToySymphony.mov" />
    <a href="http://homepage.mac.com/yuji_okamura/iSawIt/attach/2008-09-21/ToySymphony.mov">ToySymphony.mov</a>
</object>
<script type="text/javascript"><!--
    if (window.navigator.userAgent.match(/Firefox/)) {
        var objElmt = window.document.getElementById('MovObject');
        objElmt.removeAttribute('classid');
        objElmt.removeAttribute('codebase');
        objElmt.setAttribute('data', 'http://homepage.mac.com/yuji_okamura/iSawIt/attach/2008-09-21/ToySymphony.mov');
        objElmt.setAttribute('type', 'video/quicktime');
    }
--></script>

ついでに standby 属性も入れておきました。script 要素の中をコメントにしています。XHTML の場合これは本来は間違いですが、ページの拡張子を .html にしているなどでサーバがページの Content-Typetext/html として返すときには多くのブラウザも従来の HTML のように扱うのでこれで OK です。本当に XHTML としてサーバが Content-Type を返すと IE6XML として扱ってしまって Web ページとしてうまくありません。そしてコメントにしておかないと携帯電話のブラウザなど script 要素を知らないブラウザではスクリプトのコードが表示されてしまいます。

上のコードを実際に表示させると次のようになります。

ToySymphony.mov

last generated
2009-12-06
page view