2012-03-19 7 views
0

私たちはIE6からIE8までのブラウザでサポートされている古いWebベースのアプリケーションを持っています.JavaScriptとCSSはIE固有のものです。今私たちはIE9をサポートしたいと思っています。私たちのjavascriptには、setAttributegetAttributeではなく、ドット(.)を使って要素インスタンスのHTML属性にアクセスするなど、IE9ではサポートされていない多くの構文があります。新しい方法での新しいブラウザのサポート

私は、より多くのブラウザバージョンをサポートしたり、さまざまなブラウザをサポートしたりする最善の方法を探していました。

私はjQueryを使ってすべてのブラウザの非標準機能にアクセスしたり、ブラウザにはgetAttributeのようなメソッドを持っていて、IE7やIE9のような別のクラスを呼び出すと考えていました。

私はこのようなシーンでユーザーが使用する最善の方法とアプローチを使用したいと思います。

setAttributeとGetAttributeは単なる単純な例です。例えば、要素参照にアクセスするために、以前のバージョンのfirefoxなどではサポートされていないdocument.all.elementNameを使用しています。このコードをすべてJqueryに変換する別の図書館。 その後、設定や属性を取得するより多くの問題があり、問題の焦点は、すべてのブラウザでサポートJavaScriptに

おかげ

を古いJavaScriptを変換するための最良の方法何です
+1

私はまったく同じことをしました(別のブラウザ/バージョンをターゲットにしていました)ので、jQueryのルートを控えておくことをお勧めします。 –

+3

「setAttribute」と「getAttribute」を使用して書いたことは、あなたが知っている以上に多くの問題を抱えていると思います。古いブラウザーでは必ずしも正しいことではなかったからです。実際、DOM要素のプロパティとして扱われるべきものにアクセスするために、それらのメカニズムを使用した場合、さまざまな種類のものが絶対に機能しません。 – Pointy

答えて

1

IE < 9用に特別に書かれたコードが他にもたくさんある場合は、最初にすべてのIE固有のコードを特定し、それをクロスブラウザコードに置き換える必要があります。私は特定の図書館がそれを助けるとは思わない、実際POJSはおそらくもっと簡単だろう。

例えば、document.allの監督下の置き換えをdocument.getElementByIdとすることはできますが、$(jQueryやPrototypeなどからの$はここではできません)。

標準以外の属性でドットプロパティのアクセスを使用する際に問題が発生しますが、プロパティとして設定されている場合は原則的にはうまくいかない場合もあります。

ちなみに、jQueryはget/setAttributeを "オーバーライド"せず、独自のattrpropメソッドを持っています。

最終的に、すべてを最初から書き直すことになります。 feature detectionと適切な代替戦略を使用して、特定のブラウザのバージョンをターゲットにしたり、標準をサポートしたり、必要に応じて非標準動作に対処したりしないでください。

+0

フィードバックをいただきありがとうございます。ブラウザを確認するのではなく、機能の検出を使用するようにアドバイスします – daljit

2

確かにブラウザ経由で滑らかにするために、ライブラリと一緒に行くお勧めします便利な機能をたくさん提供します。多くの選択肢があります:jQueryYUIClosurePrototype、またはany of several othersです。 jQueryはhugely dominant at the momentなので、これに精通している人を簡単に見つけることができます(また、積極的な開発リソース、スポンサーシップなどがあります)。しかし、選択するライブラリはあなた次第です。あなたはむしろgetAttribute/setAttributeよりも、属性の反映プロパティを使用する時間がありますので

また強く、DOM2 HTML specificationとHTML5仕様のWeb Application APIs部に密接に見てお勧めします。たとえば、element.idは、要素のIDを参照する完全な有効なブラウザ間の方法です。 element.getAttribute("id")を使用する必要はありません。同様に、element.getAttribute("class")ではなくelement.classNameを使用します(一部の以前のバージョンのIEでは正しく動作しません)。 IE8以前では、任意の属性の要素に他のプロパティを追加することもできます(たとえば、要素にfoo属性がある場合はelement.foodata-fooの場合はelement['data-foo'])、IE9などのブラウザ(正当な理由で)を使ってはいけませんが、標準的なプロパティの場合、頻繁に反映されたプロパティがあります。

エレメントに任意の属性を使用している場合は、HTML5仕様ごとに名前をthe data-* formatに変更することをおすすめします。

+0

フィードバックをいただきありがとうございます。もし私がどんな図書館に行っても、それはjqueryと役に立つリンクに感謝します。良いアドバイスのために – daljit

2

IE 9は、過去15年間にリリースされたすべての主要ブラウザと共通して、HTML属性を反映するDOMプロパティにアクセスすることを絶対にサポートしています。だから、あなたはそれが聞こえないとわかりません。[編集:Aaaah、私はカスタム属性について話していると思います。。これらのプロパティはDOM仕様で標準化されており、将来のブラウザでも動作することが保証されています。さらに、通常は、getAttribute()setAttribute()(特に古いIEでは、これらのメソッドの実装が壊れている)ではなく、プロパティを使用する方が便利で互換性があります。

jQueryのようなライブラリは、ブラウザの問題や非互換性をスムーズにするのに役立ちますが、実際には、多くの人が信じるほどのものではありません。これらのライブラリの存在は、ブラウザでのDOM操作が難しく、問題がないという一般的な神話を作り出しました。一般的にそうではありません。今日、問題はこれまで以上に理解され、文書化されています。

+0

+1。 – RobG

+0

フィードバックをいただきありがとうございます。私は、ライブラリが余分なレイヤを追加し、開発者が基礎となる言語を理解するのを止めることに同意します。 – daljit

+1

@daljit:開発者がライブラリを使用してJSとDOMの仕組みを理解できないようにするには、ライブラリではなく開発者に任せます。私は、他の人がすでに見つけて働いていたSafariのようなまれな奇妙なものをデバッグすることには興味がありません。そして、私は*良い*ライブラリが提供するユーティリティの機能を、再作成するよりはむしろ使っています(再作成するのは事実上誰もその冗長なものを何度も繰り返し打ち切りたくないからです)。私の2セント。あなたは本当に何が起こっているかを確実に確認してください。しかし、風呂場の水で赤ちゃんを捨てないでください。 –

関連する問題