• 締切済み

object 要素貼り込みのアプレットがいつからか動作しなくなった

 Windows XP(SP2)の Internet Explorer 6 で,object 要素で貼り込んでいた Java アプレットが,いつの間にか動作しなくなっていました。  サーバ上のファイルは操作しておらず,クライアント側で行った操作は Windows Update くらいです。  Internet Explorer で MSJVM を使用しています(MSJVM 上で動作させる必要があります)。Windows XP は,初期版に SP2 を適用させたもので,MSJVM は存在しています。  アプレット貼り込みに使ったコードは, <object codetype="application/java" classid="java:***.class" width="500" height="320"></object> (「***」はクラス名)です。これに,codebase 属性を加えても,classid 属性を「java:***」「***」「***.class」にしても症状は同様でした。  少なくとも半年前(2005 年 9 月ごろ)までは,この記述で動作していました。この時点では,コンソールにエラーなどは出ていません。  現在は,クラスファイルをローカルに置き,jview /a でクラスファイルを指定すれば動作することは確認しています。  applet 要素を使用すれば貼り込めますが,事情によりこれは使えません。  以上より,対策等ご存じでしたら,ご教示願えますでしょうか。  また,心当たりとして「Windows Update」があるわけですが,もし,これにより標記の現象が生じてしまうような OS・ブラウザなどの修正が起こってしまっていたのでしたら,そのときの Windows Update の内容をご教示くださればと思います。

みんなの回答

  • kacchann
  • ベストアンサー率58% (347/594)
回答No.8

原因は、これ? ネットを回って調べただけなので、 真実のほどは全くわかりませんが…。 ・http://www.hotfix.jp/archives/alert/2006/ms06-004.html (「IEでモニカの使用がサポートされなくなる」) ・http://support.microsoft.com/default.aspx?scid=kb;ja;906294

elttac
質問者

お礼

 確証が得られるまでに至っていませんが,MS05-038 の修正で,object 要素を使った貼り込みができなくなったということのようです。動作しなくなった時期とも符合します。  確かな結論を得られるまで調べ尽くしてはいませんが,ひとまずここで質問を締め切らせていただきたいと思います。  ありがとうございました。

elttac
質問者

補足

 ご回答ありがとうございます。  ご紹介いただいたページがヒントになりました。「MS06-004」より,「MS05-038」が怪しいようです。  もう少し調べてみたいと思います。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.7

IE6でclassid を使用しての記述に <object codetype="application/java" width="500" height="320" classid="clsid:08B0E5C0-4FCB-11CF-AAA5-00401C608501" > <param name="code" value="***.class" /> </object> という記述でアプレットが記述できることが判りました。 しかし、これは、全然推奨できないです。 ネットワーク上をぶらぶらしてみると clsid:の記述がまちまちで、WEB上の情報によるclsidだと、IEが落ちてしまうものもありました。 そのなかで、スタンダード的にはSUN でのOBJECT をJAVAアプレットに割り当てる記述でしたが・うまくいきませんでした。 かなりバージョンに依存するのでよりやっかいです。 本来であれば、 <object codetype="application/java" classid="java:***.class" width="500" height="320"> でネストしてやればいいのですが、IEではネストしたOBJECTの読込が失敗しても表示するようでうまくないです。 結局の処OBJECT 要素は、IEではちゃんと規格通りに実装されていない (;;) ってわけですね。(XHTMLを使いたい場合は深刻ですねorz)

elttac
質問者

お礼

 結局本件は,マイクロソフトの,Internet Explorer のセキュリティ強化のとばっちりで,object 要素による貼り込みができなくなったということでよさそうです。  classid 属性に「clsid:...」を入れるのは,確かに可能ですが,ほめられたものではない,気持ちの悪い書き方であるとは思います。  MSJVM に頼らない,抜本的な対策を講じるしかないようです。  重ねてのご回答,ありがとうございました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.6

>「貼り込めなくなった原因」が【いつ】発生したかということです。 それが、わかったところで、以前のバージョンのIEを使うというわけにはいかないのではないでしょうか? (閉鎖的なネットワークであるなら別ですが、問題があるから更新されてるわけで、一部分だけを戻すということもできないのですから) ここまでの話で言うと、(動かなくては話にならないわけで)applet 要素を使うしかないような気がします。 他のもっと良い回答をくれる人をお待ち下さい。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

>「原因」をご教示ください。 原因は、すでに#1で参照したURLを参照してくださればわかると思いますが、IEでは、classid をJava のクラスファイル指定に使うとは思っていないと言うことだと思います。

elttac
質問者

補足

 質問文中で述べさせていただきましたが,少なくとも半年前までは,【classid 属性にクラスファイル名を指定してアプレットが貼り込めていた】のです。  これがなぜ今になって貼り込めなくなったのか,それは,おっしゃるようにマイクロソフトの思想的な問題があるとするならば,その思想の変更を実装に反映させたタイミングが存在することになり,それが「貼り込めなくなった原因」になると思います。  その「貼り込めなくなった原因」が【いつ】発生したかということです。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-one-html.html#ID-9893177 ↑ のHTMLObjectElement (DOMモデルでいうobject 要素)によると、(ドラフトだけど・) classid は、逆になくて、 code は、Applet class file とはっきり書いてある。 (ただ、既に#1補足で指摘されているようにHTML規格のobject 要素にはない<??) こういうことからすると、規格ありきではあっても、あまり規格にこだわってもしょうがないと思いますけど) (ブラウザの実装者からすると、どっちかを立てねばなんねえと言うことなんだと思います)

elttac
質問者

補足

 DOM に classid 属性の参照がない理由は,   http://lists.w3.org/Archives/Public/www-dom/2002AprJun/0046.html にあります。引用しますと, I suspect the removal of the classid attribute was due an editorial error since I didn't find traces of the removal in our archives. ということだそうで,それより前の WD にはあったものの,いつの間にか消えてしまったということのようです。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>classid 属性の使い方も,上掲のページにあるもので,正しいものです。 一応観てきましたけど、javaのクラスファイルを指定するものとして使っても良いけど、java のクラスファイルを指定するのに使うのが必ずしも要求されているワケではなく、正しいとまでは言えないような気がします。(ブラウザの実装による余地がある)

elttac
質問者

補足

 確かに,classid 属性によるクラスファイルの指定が唯一正しいわけではありません。現に,object 要素によって Flash ファイルを貼り込むときは,【HTML の仕様の範囲で】Internet Explorer と Mozilla で指定方法が異なり,矛盾なく共存させられます。  しかし,object 要素の code 属性は,そもそも HTML の範囲の外であるので,その使用は HTML として矛盾をきたします。  だとすると,「HTML として矛盾せずに object 要素を使用してアプレットを貼り込めるか」ということになると思います。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>Windows XP(SP2)の Internet Explorer 6 で,…動作しなくなっていました。 ということだったのでは? >…によると object 要素に code 属性は存在しないので http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/properties/code.asp (javaのclass ファイルを指定するとある) では、IEでは存在するので、(IEで動かないというのなら)使えばいいのでは。(applet がマシならそれを使えばいいけど、使えないから言ってるんでしょう?) >classid 属性の使い方も,上掲のページにあるもので,正しいものです。 他のブラウザでclassid が機能しIEで、(思うようには)機能しないがcode がそれに該当するというのであれば、 両方を指定するというような解決策になると思う。 または、ブラウザによって書き方を変える必要があると思う。(それが現実的だと思う、classid 使い方がたとえ正しいとしても、IEがそのようになっていないのだから正しいとか言っても仕方ない<残念だが) でなければ、何を言っているのかよくわからない。

elttac
質問者

補足

 質問で述べましたとおり,Windows XP SP2 で【今まで動作していた】アプレットが動かなくなったということで,「対策または原因」をお尋ねしています。  code 属性にこだわっていらっしゃいますが,つまり,   「存在しない code 属性を使ってしまうペナルティ」>「存在するが好ましくない applet 要素を使うペナルティ」 という意味で,「applet のほうがまし」なのです。  お尋ねしたいのは,「対策」または「原因」です。対策がないのであれば,「原因」をご教示ください。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

<object codetype="application/java" code="***.class" width="500" height="320"></object> ではどうでしょうか? object エレメントの classid 属性については、 マイクロソフトのサイトで http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/properties/classid.asp のように説明されているので、ActiveX のclassid を指定するものです。

elttac
質問者

補足

 ご回答ありがとうございます。  確かにお書きくださった方法で動作しますが,   http://www.w3.org/TR/html4/struct/objects.html によると object 要素に code 属性は存在しないので,解決策には残念ながらなりません(applet 要素を使うほうがまだまし)。  また,classid 属性の使い方も,上掲のページにあるもので,正しいものです。

関連するQ&A