Есть ли способ быстро определить, поддерживает ли браузер изображения с поддержкой CORS, не портя браузер? - PullRequest
9 голосов
/ 09 декабря 2011

Существует ли быстрый тест, чтобы определить, поддерживает ли браузер изображения с поддержкой CORS, не портя холст при их рисовании.Я знаю, что Chrome 15 поддерживает это, Firefox 9Beta, но не Firefox 8, Safari - нет, IE9 - нет.Но должен быть довольно простой тест, чтобы определить это, это в основном рисование на холсте с изображением и выяснение, получаете ли вы исключение при попытке получить данные изображения, или есть какой-то другой простой способ определить это.

Ответы [ 3 ]

8 голосов
/ 14 августа 2012

Это похоже на работу:

if ('crossOrigin' in new Image())
    // ...
5 голосов
/ 10 декабря 2011

Вот как я тестировал поддержку CORS tained canvas. Если у кого-то есть способ без необходимости загружать изображение, пожалуйста, опубликуйте его здесь:

function CanvasFunctions() {
    var _initialized = false, _corsNotSupported = false;


    function DrawImage(image, src) {
        jQuery.when(initialized()).then(function () { 
            if (_corsNotSupported) {
               image.src = GetProxyImage(src);
            } else {
               image.src = src;
            } 
        }
    }

    function initialized() {
        if (_initialized) {
            return true;
        }

        var dfd = $.Deferred();

        var src = 'http://example.com/corsImage.jpg',
            image.onload = function () {
                var canvas = document.createElement('canvas');
                canvas.width = 250;
                canvas.height = 250;
                var ctx = canvas.getContext('2d');
                ctx.drawImage(image, 0, 0, 200, 200);
                try {
                    var hit = ctx.getImageData(0, 0, 1, 1).data[3] > 1;
                    console.log('Canvas was not tainted by CORS image, hit: ' + hit);
                } catch (e)  {
                    console.log('Canvas was tainted by CORS image, reverting to passthru for images');
                    _corsNotSupported = true;
                }
                _initialized = true;
                dfd.resolve(true);
            });

        image.src = src;


        return dfd.promise();
    }
}
4 голосов
/ 12 декабря 2011

Самый простой способ определить, поддерживает ли браузер CORS, - это поиск свойства XHR withCredentials. IE использует объект XDomainRequest вместо XHR, так что вам нужно искать это также:

function supportsCors() {
  var xhr = new XMLHttpRequest();
  if ("withCredentials" in xhr) {
    // Supports CORS
    return true;
  } else if (typeof XDomainRequest != "undefined") {
    // IE
    return true;
  }
  return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...