4

実装の違いを平準化して JavaScript を拡張することに重点を置いた JavaScript フレームワークはありますか? 異なるブラウザ間で同じ機能を提供するだけのフレームワークという意味ではなく、非標準のブラウザを標準に準拠しているかのように動作させるものです。

基本的にie7.jsは、MSIE やhtml5shivHTML5 要素に対して何をするか、JavaScript に対して何をするかが必要です。または、Web Sockets または Canvas のさまざまな回避策。

jQuery とその同類がそのトリックを実行できると思いますが、ブラウザ間に違いがないかのように、標準に準拠した通常の JavaScript を記述できるものが望ましいと思います。

編集: 他のすべての回答が指摘しているように、はい、jQuery は JavaScript であり、はい、ほとんどの JavaScript フレームワークはクロスブラウザーの互換性を改善しようとしています。私の意味を明確にさせてください。

さまざまなブラウザ間での JavaScript 実装の違いは、最近では言語自体とはあまり関係がありません。古いブラウザにはいくつかの組み込みメソッドが欠けていることを除けば、型もほとんど同じように動作します。しかし、特に現在の状態 (Chrome/Firefox/Safari) と MSIE の従来のバージョン (MSIE 7) との間には違いがあります。最も顕著なのは、DOM の API に多かれ少なかれ微妙な特徴がある傾向があることです。

ほとんどのブラウザーで動作する JavaScript を記述できるフレームワークだけは必要ありません。それらは10セント硬貨です。最新のブラウザーと従来のブラウザーの両方で機能するコードを記述できる薄いレイヤーが必要です。jQuery、Dojo などはすべてそれをはるかに超えており、既存の API を統合するのではなく、独自の独自の API を提供しています。

「jQuery を使用する」と言うのはRich Ajax Platform、ブラウザ間のレンダリングの違いを避けたい場合は (または他のコード生成フレームワーク) を使用する必要があると言っているようなものです。「代替」は必要ありません。「バグ修正」が必要です (文字通りではありません)。

EDIT2:ポイントを家に追いやるために:私はフレームワークだけを探しているわけではありません。私は jQuery に精通しており、YUI を試したことがあり、現在 Dojo を試してみることを検討しています。私は単に「良い」フレームワークが欲しいわけではありません。私の非常に具体的な説明に合うものが欲しいです。そのようなものがなくても問題ありませんが、その理由を知るのは興味深いことです (つまり、「誰もが jQuery を使用するのに忙しすぎる」という技術的な理由ではありません)。

4

8 に答える 8

6

投稿で示唆されているようにミニマリストの考え方をしている場合は、addEventListener と attachEvent、getTagsByClassName と no method、スクロールのずれ、ウィンドウのサイズなど。Javascript のずれのほとんどは実際には DOM メソッドのずれであり、リストは長いですが、すべてを一度にコンパイルする必要はありません。独自のクロスブラウザー機能をコーディングに追加します。

それがなければ、jQueryを使用してください。

于 2010-08-03T21:21:41.010 に答える
5

すべての JavaScript ライブラリは、ブラウザ間で互換性のあるきれいな JavaScript コードを記述できるようにすることで、「競技場を平等に」しようとします。

最も人気のあるもののいくつか:

プロトタイプ

Mooツール

スクリプトアキュラス

jQuery (私のお気に入り)

于 2010-08-03T21:13:41.090 に答える
4

あなたが望むものを正確に達成する可能性はありません。IE は DOM ノードのプロトタイプを公開しないため、個々のノードごとにそれを行わずにそれらを拡張する方法はありません。また、IE の DOM ノードなどのホスト オブジェクトの既存の読み取り専用プロパティを上書きすることは通常 (おそらく常に?) 不可能であるため、DOM ノード自体で誤って実装された DOM プロパティを修正することはできません。DOM メソッドを修正しただけでも、新しいノード参照を取得するたびに関数を呼び出してこれを行う必要があります。

var el = someNode.nextSibling;
fixUp(el); // Adds missing methods to the element and fixes broken ones
var matchingEls = el.getElementsByClassName("someclass");

あなたが望むことが不可能である理由の本当に良い詳細な説明については、これを読むことをお勧めします: http://perfectionkills.com/whats-wrong-with-extending-the-dom/

于 2010-08-04T13:29:20.100 に答える
2

単純な「ブラウザを正しく動作させる」というフレームワークがあるとは思えません。それらはすべて、これを大幅に超えています。

とは言っても、車輪の再発明には何の価値もないので、JavaScript が無効になっているユーザーのための賢明なフォールバックがあることを確認しながら、jQuery など (おそらくカスタムの最小ビルドを使用する) などに時間を投資するのが賢明かもしれません。

于 2010-08-03T21:14:08.553 に答える
1

私があなたを正しく理解していれば、http://flowjs.com/はあなたが探しているものに非常に近いはずです。主な目標: 「FlowJS は、すべての最新ブラウザーに DOM レベル 3 API を実装する」

于 2010-12-19T22:14:45.473 に答える
1

「標準」の JavaScript を作成するときは、一般的に使用される機能のクロスブラウザー実装を提供する独自の関数を定義する傾向があります。addEventおよびremoveEvent(いくつかの実装があります) は、この手法の一般的な例です。私は、機能を検出して毎回正しいコードを実行するのではなく、特定の問題に対して 1 つの関数を呼び出すことができるようにするいくつかの関数を調査して作成しました。

要素の高さ、幅、オフセットの取得などは、ブラウザごとに異なる実装が必要ですが、関数に簡単に記述して、必要な場所で再利用できます。

したがって、私の「解決策」は主に DIY の解決策です。「utilities.js」というファイルを作成し、必要に応じて関数の追加を開始します。addEventremoveEvent、およびクロスブラウザーXMLHttpRequestは、開始するのに適した場所です。ここで、私はあなたを始めましょう:

function createXHR()
{
    var xhr;
    if (window.ActiveXObject)
    {
        try
        {
            xhr = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e)
        {
            alert(e.message);
            xhr = null;
        }
    }
    else
    {
        xhr = new XMLHttpRequest();
    }

    return xhr;
}

この関数は、必要に応じて使用できる XMLHttpRequest オブジェクトを返します。楽しみ。

編集:このアプローチは、理論的には名前空間をかなり混雑させる可能性があることに注意してください。utilitiesオブジェクトを作成して を呼び出すのが最善かもしれませんutilities.createXHR

于 2010-08-04T13:45:48.407 に答える
1

この質問が出されてから長い時間が経ちましたが、おそらく誰かの役に立ちます: 最近、Financial Times の開発者グループが、さまざまなブラウザーに必要な部分だけにパッチを当てる一種のユニバーサル ポリフィルをセットアップしました.. http:// cdn.polyfill.io/v1/docs/

于 2014-11-20T07:50:17.187 に答える
0

あなたはJQueryでそれを持っています。JQuery を使用すると、さまざまなブラウザー実装間で欠けている一貫性で DOM をクエリできます。そして、ajax 呼び出しは、人々が最近 JavaScript で扱う問題の最大のセットを扱っていると言えます。

于 2010-08-03T21:13:17.553 に答える