6

私は Modernizr を使用して、ユーザーが実行しているブラウザーでサポートされている機能を検出しています。しかし、base64 の互換性をテストする際に、理論的な問題に直面しました。このサポートのパッチについては、こちらで詳しく説明しており、動作します (IE8 の奇妙なケースを除いて)、base64 でエンコードされた最大 32KB の画像のみが許可されます

32KB の長さの base64 文字列を JS ファイルに埋め込みたくありません。膨大な量のファイルが追加されます。では、JS を使用して 32KB の有効なイメージを作成できますか? 文字列の長さが 32KB に達するまで、何らかのパターンを文字列内で繰り返す、そのようなことを考えています。または、既存の小さな文字列 (Modernizr パッチの文字列など) を取得し、最後にジャンク データを追加しても有効なイメージが得られる場合があります。

base64 エンコーディングについては、既存の画像を操作する方法以外はほとんど知りません。誰にもアイデアはありますか?

4

1 に答える 1

3

答えがあると思います。改行を追加するとうまくいくように見えるまで、あらゆる種類の手法(手動で追加できるPNGソースの繰り返しテキストチャンクなど)を試しました。

    var b64test = new Image();
    b64test.onload = function() {
       alert("yay!")
    }

    b64test.onerror = function() {
       alert("boo")
    }

    /* A 1x1 GIF image */

    var base64str = "R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw=="
    while (base64str.length < 33000) {
        base64str = "\r\n" + base64str;
    }

    b64test.src= "data:image/gif;base64," + base64str;

IE8 では失敗し、IE9 などで動作します。ただし、代替案があれば聞きたいです。

于 2011-07-13T19:18:15.087 に答える