• ベストアンサー

質問です! Operaって、document.all使えるんですか?

質問です! Operaって、document.all使えるんですか? javascript:alert(document.all)という風に入れたら、[object HTMLCollection]という値が返ってきました ちなみに、  Firefox3.6 : [object HTML document.all class] Netscape7 : undefined Safari (おそらく4) : Operaと同様。 document.allて、IEだけかと思っていましたが。

noname#128209
noname#128209

質問者が選んだベストアンサー

  • ベストアンサー
  • Chaire
  • ベストアンサー率60% (79/130)
回答No.3

Gecko 系も Firefox 以前、Mozilla 1.8 辺(?)から document.all をサポートしています。ただし、 ・Full Standards Mode では使用できない。 ・document.all.tags は未サポート。 ・if (document.all) は必ず偽を返す。 という制約があります。 Bugzilla に長い議論がありますが、anti-MS かはあまり関係ありません。心情的にはともかく、Gecko の開発者は IE の挙動の解析に多大な労力を割いています。 議論の 1 つは、すでに W3C-DOM の getElementsByTagName、getElementById が IE を含むほとんどのブラウザで動作するのに、document.all が必要かどうか。もしサポートしたことにより、開発者が document.all を安易に使い出すようになれば、IE/NN ブラウザ戦争の二の舞になりかねない。しかしながら、すでに all を用いたコードが大量に存在するという現実もあります。 all をサポートするのは良しとしても、今後の開発者が all を使うことを推奨しているわけではない。上記はそういう意思表示と考えられます。 ところで、IE5-7 以下の getElementById が id 属性だけでなく name 属性も検索する、あるいは IE6-7 の getElementsByTagName('*') が要素だけでなくコメント(処理命令や文書型宣言もコメントと見なす)も拾う、というのはよく知られた不具合ですが、これらはもともと all の挙動から来ています。そして前者に関しては IE8 で修正され、getElementById は id 属性のみを検索するようになりました。 つまり、all を実装するにも仕様が不明瞭であり、しかも MS 自身によって変更されうるということです。これに関しては No.2 が言うように、HTML5 の HTMLAllCollection の導入が助けとなるでしょう。 いずれにせよ、Windows プログラミングでもしない限り、今後の開発者が all を使う必要はないと思います(IE 専用であることを示すために、敢えて all を使うことはあるでしょうが)。あと、JScript と MSHTML は区別すべきかと思います。

その他の回答 (3)

回答No.4

なるほど、、、以前Firefoxでdocument.all関連が実行される(スクリプトエラーで止まる)謎のバグに悩まされましたが、 Firefoxのバグではなくて、そういう仕様でしたか。 すみません、スレッドからはずれます。 > つまり、all を実装するにも仕様が不明瞭であり、しかも MS 自身によって変更されうるということです。これに関しては No.2 が言うように、HTML5 の HTMLAllCollection の導入が助けとなるでしょう。 JavaScript1.2の弊害やそれをサポートすることでコーディングが複雑化するのを危惧してのことだと思いますが、 W3CやWHATWGが制定するから仕様変更は起きない、というわけではないと思いますし、 それはつまり一企業が制定する規格だからダメ、と言う理由にはならないと思います。 W3Cのセリフならわかるんですけどね。。。 倒産したNetscape社(旧HTMLとJavaScript)はダメ、大きな会社でも一企業が作ってる(DHTMLとJScript)からダメ、 代わりにW3C定義のHTML/XHTMLとECMAScript(ECMAScriptではdocument操作ができないので、W3Cが制定しているDOMを使って)にしなさい、 というのがW3Cがそれぞれを推奨する理由だと思いますから。 というか、Mozilla FoundationならむしろE4Xだと思うんですが。 > all をサポートするのは良しとしても、今後の開発者が all を使うことを推奨しているわけではない。 私も推奨しているわけではありません。 ただ、「短く書けるからその方が良いのではないか」と考えます。 (過去の投稿もdocument objectが使える所は基本的にdocument objectで書いています。 * JavaScript1.1のdocument objectのことで、DOMではありません。) PHPやJavaなどDOMが使える言語でも、DOMではなくそれぞれの言語特有の書き方が主だって使われていると思います。 それと同じですね。 > あと、JScript と MSHTML は区別すべきかと思います。 まず、Microsofhtの言い方はMSHTMLではなくDHTMLだと思いますので、それに合わせてDHTMLと言わせて頂きます。 http://msdn.microsoft.com/en-us/library/aa737439.aspx 私はJScriptとDHTMLは区別しているつもりです。 もしHTAとDHTMLブラウザ(ホストアプリケーション)の区別のことをおっしゃってるのだとしたら、 私はHTAでのJScriptとDHTMLブラウザでのJScriptを別物として考えていませんし、する必要はないと思います。 http://msdn.microsoft.com/en-us/library/zwaxkcdk(VS.85).aspx HTMLブラウザ、Greasemonkey、Dreamweaver、Photoshop、Illustratorの全てで「JavaScript」と呼んでいるのと同様に、です。 (本来は、HTMLブラウザ以外は全てJavaScriptではなく、ECMAScriptのホストアプリケーション拡張だと思います。)

回答No.2

> HTML5でDocumentAllCollectionというのが定義されていますので、 すみません、間違えました。 正しくはHTMLAllCollectionです。 これに含まれるのはHTMLページ(ドキュメント)上で、 id属性が指定されている要素と、<a>や<img>などでname属性が付いている物です。 Netscape社やMicrosoft社が定義したdocument.layersやdocument.allのルールとほぼ同じで、 それにdocument.imagesやdocument.linksなどを統合した物ですね。 http://dev.w3.org/html5/spec/infrastructure.html#htmlallcollection-0

回答No.1

元はJScriptというMicrosoft社が定義しているJavaScript互換の言語の物ですが、 Operaはバージョン6くらいからサポートしています。(それ以前からサポートしているかもしれませんが、未確認) Safariも1.2か2.0くらいからサポートしていると思います。 (Safari1.0が未実装、3.0、4.0が実装というのは確認していますが、その間は不明。) HTML5でDocumentAllCollectionというのが定義されていますので、 これがdocument.allに相当すると思います。 これにむけて、Geckoもやっとサポートしだした、と言うことでしょう。 Gecko開発者にはアンチマイクロソフトな人が多いようですので、最後までdocument.all(JScript互換)が嫌われたんでしょうね。

関連するQ&A

  • ほとんどのブラウザに対応したキーイベントのプログラムをJavascri

    ほとんどのブラウザに対応したキーイベントのプログラムをJavascriptで書きたいのですが、 IEではwindow.eventは使えましたがFireFoxなどでは定義されていないエラーになります。 ブラウザごとのキーイベントについて知りたいです。 IE,FireFox,Safari,Chrome,Opera,Netscape,Other

  • document.selectionについて

    IEで下記の呼び出し方をするとFireFoxやChormeやSafariでエラーが出ます。 var a = document.selection.createRange().parentElement(); 自分で調べたところ、ブラウザごとにscriptを書かなければいけないようでしたが、 Jqueryを使用して1文で済ませることはできないのでしょうか? Javascriptについてあまり詳しくないのでどなたか助けてください;w;

  • 外部JavaScriptでのdocument.writeについて

    今、JavaScriptを使ってHPを作ろうと思っています。 そこで、外部ファイルとしてJavaScriptを作り、HTML内でsrcを使って読み込んでいます。そのときに問題が発生しているのですが、外部ファイルでdocument.writeを使うと処理が戻ってきません。 例) .... xxxx="テストJavaScript"; document.write(xxxx); .... ちなみに、IEで実行した場合はきちんと表示し、NetScapeで実行した場合にずっと通信中になってしまいます。 これはNetScapeの仕様なのでしょうか。 分かりにくい説明で申し訳ありませんが、どなたかご回答お願い致します。

  • Operaは劣っているのでしょうか?

    現在OperaとIE、Firefoxがありますが、主にOperaを使用しています。 ほとんどのサイトなどは問題ないのですが、時々「IEとFirefox以外のブラウザではご覧になれません」と出てきて先に進めないサイトもあります。 FirefoxやIEのUserAgentに切り替えることができますので、切り替えると特に大きな問題なく見られます。 ところで、IEはWindows標準のブラウザですので対応していないとなると大問題ですが、 (1)なぜFirefoxは動作するのにOperaでははじかれるサイトがあるのでしょうか? (2)OperaもFirefoxもサイトを表示するエンジン(JavaScript互換性など)の機能が実はOperaが劣っているのでしょうか? (3)もしくはパソコン版Operaの認知度が少なく、ゲーム機や携帯端末に入っているOperaという感じでサイト制作者側から見るとOpera=パソコンではないという印象が強いのでしょうか? それにMozillaの後継としてFirefoxになっているのですが、Mozilla時代を知らなくても使っている人が多いと思います。 個人的にはFirefoxよりもOperaの方が断然便利だと思います。 (4)なぜFirefoxよりもOperaが人気なのか分かる人があれば教えていただきたいです。 質問が長くなりましたが、一つだけでも答えられるところがあればご回答よろしくお願いします。

  • FirefoxとOperaがCSSを勝手に補完

    <input type=text style=width:0> このようなinput要素にwidth:0というstyleを付加した小さなドキュメントを用意し、 Firefox(5)やOpera(11.50)で見ると、勝手にwidthを1pxに書き換えられます。 IE9,Safari(5.1),Iron(11)では同様の現象は確認できませんでした。 しかし、仕様の犬であるFirefoxやOperaがやることが間違っているとは思えないのです。 訳のわからないハックを使った解決は望んではいません。 FirefoxやOperaが正しいとわかるソース、あるいはIE9やWebkit系ブラウザが正しいとわかるソースをください。 ご存じの方おられましたら、よろしくお願いします。

    • ベストアンサー
    • HTML
  • これをOperaでも動くようにしたい

    http://programming-magic.com/?id=158 こちらの function(){ var l = document.getElementsByTagName("A"); for(var i=0; i<l.length; i++){ var a = l[i]; if(a.href.indexOf('javascript:',0)){ var e = /*@cc_on!@*/0; if(e){//IE専用 a.href = 'javascript: (function(){location.href = "'+a.href+'";})();'; } else{//Firefox、Opera、Safari a.href = 'data:text/html;charset=utf-8,'+encodeURIComponent('<script type="text/javascript"><!--\ndocument.write(\'<meta http-equiv="refresh" content="0;url='+a.href+'">\');// --><'+'/script>'); } } } } を、Operaでも動くようにできませんでしょうか

  • IE7とfirefoxでは動作するのですがsafariでは動きません。

    現在あるサイトのJavaScriptの開発を担当している者です。 下記のソースを使用してdivの中にflashを表示させるという機能を作成しております。 <div id="FlashInformation"> <script language="javascript" type="text/javascript"> FlashInfomation();</script> </div> 関数FlashInfomation()の動作はdocument.write("OBJECTタグ")を行い、 htmlファイルにOBJECTタグを吐き出すという動作を行っているのみです。 IE7、IE6、firefoxでは正しく動作するのですが、 safariだけは全く動作しません。 他にも<body>内にonload="FlashInfomation()"と記述し、FlashInfomation()の動作を 「document.getElementById("FlashInformation").innerHTML = "OBJECTタグ";」 という風に変更してみたのですがこれもsafariのみ動作しませんでした。 safariでデバックしてみると、 「TypeError - Object(result of expression Flashinfomation) does not allow calls.」 というエラーが出ておりました。 動作確認として、HTMLファイルに直接OBJECTタグをぶち込んでみると、 これはsafariでも動作するのですが、IEでは表示に問題がある為、 この方法は使えません。 この問題に対する解決策、または参考サイトでも良いので何か知っている方がいらっしゃいましたら、 どうか教えていただけないでしょうか。 何卒宜しくお願い致します。

  • Operaでのobjectタブの高さ変更

    iframe代わりにobjectタブを使用しています。 読み込むページにあわせてjavascriptで高さを変更したいのですが FireFoxと違ってOperaではどうもうまくいきません。 どのようにすればよいのでしょうか。どなたか回答お願いします。 ちなみに現在のソース(必要部分のみ)は以下のような感じです。 <object onload="load()" id="content" type="text/html" data="~"></object> <script> function load(){ document.getElementById("content").height=document.getElementById("content").contentDocument.body.offsetHeight+"px"; } </script>

  • OPERAでのCSS利用

    個人ホームページを運営している者です。HTMLやCSS、Javascript、CGIなどについてひととおりの知識は持っています。 質問ですが別ファイルで用意したCSSを利用するホームページ作成し、表示具合をwindows版のIEおよびNetscapeで確認して何ら問題ないのにOPERAで見るとCSSが効いていないのですがこれはOPERA特有の性質によるものですか?そして正常にCSSを効かせるためにはどうしたらよいのでしょうか?よろしくお教えください。

  • firefoxやsafariへの対応。

    firefoxやsafariへの対応。 http://www.perl-labo.org/gocount/2/ 上記ページのJavascriptを利用したいのですが、 「ジャンプした回数はこちら。」のテスト用ページをクリックしても firefoxではカウントされません。 safariではundefinedがカウントされています。 OperaとIEでは正常にカウントされています。 ソース上には、if (window.XMLHttpRequest) { // Safari, Firefox など と記載されているので、safariやfirefoxにも対応していると思ったのですが、 別の部分のコードが対応していないのでしょうか? Perlは簡単な改造程度は書けるのですが、JavaScriptはまったく知識がないので、 safariやfirefoxに対応させる為にはどの部分を変更すればいいのかがわかりません。 各ブラウザのバージョンは最新にして、テストしました。 対応方法をご存知の方、どうぞよろしくお願いいたします。