2015-11-07 2 views
0

Я пытаюсь преобразовать facebook изображения в base64, но FileReader не будет работать на IE9, поэтому я решил использовать холст.IE9: canvas.toDataURL SECURITY_ERR

Во всяком случае, с помощью холста также генерировать вопрос:

SCRIPT5022: DOM Exception: SECURITY_ERR (18)

И это мой код:

var url="http://graph.facebook.com/1420060541/picture?width=320&height=320"; 
var canvas = document.createElement('CANVAS'), 
ctx = canvas.getContext('2d'), 
img = new Image; 

img.onload = function() { 
    canvas.height = img.height; 
    canvas.width = img.width; 
    ctx.drawImage(img, 0, 0); 
    var dataURL = canvas.toDataURL('image/jpg'); 
    console.log(dataURL); 
    canvas = null; 
}; 
img.setAttribute('crossOrigin','anonymous'); 
img.src = url; 
+1

Команда IE не реализовала атрибут «crossorigin» до того, как 11-я версия их «только имеет имя» * браузер *. Так что ты ввернута. Возможное обходное решение: прокси сервера в том же домене. – Kaiido

ответ

2

обновление

Se У ems facebook есть заголовок кросс-заголовка Access-Control-Allow-Origin : "*", позволяющий любому видеть изображения. Если вы попытались загрузить изображение, забыв добавить img.setAttribute('crossOrigin','anonymous');, добавив, что второй раз не удастся, потому что кэшированное изображение мешает заголовкам запроса. Очистите кеш и отправьте запрос снова с img.setAttribute('crossOrigin','anonymous');, который может решить вашу проблему.

Ошибка перекрестного домена. Нет решения. Изображения должны быть из одного домена, поэтому вам нужно переместить изображение в свой домен, если он у вас есть. Или настройте сервер на своем компьютере и переместите изображение в каталог. Если ваш домен www.privateDomain.com, то только изображения с privateDomain могут быть доступны через toDataURL Если вы просто используете свой жесткий диск, то есть URL-адрес вашей страницы начинается с file:///, вы не можете получить доступ к какому-либо изображению через toDataURL.

Существуют исключения из-за того, что некоторые серверы отправляют заголовки с их изображениями, которые разрешают доступ к перекрестному домену. Одним из источников таких изображений является wiki commons. Есть и другие, но вам придется их искать.

Другое решение - отключить сетевую безопасность в браузере (я не знаю как на IE), но это оставит ваш браузер открытым для атак.

Печально, что мы не можем доверять даже изображениям, но так оно и есть.

+0

На самом деле, по крайней мере, из их графического API, изображения FB подаются с заголовками 'Access-Control-Allow-Origin: *', поэтому настройка атрибута 'crossorigin'' '' 'anonymous'' могла бы сработать, если IE реализовал эту функцию ... – Kaiido

+0

Просто попробовал изображение из списка моих друзей, и он бросил Tained. Но нашел решение. – Blindman67

+0

Так изменилось ли это за последние две недели? или вы говорите о неграфических FB-изображениях, как в первой версии моего комментария? – Kaiido

Смежные вопросы