Я просто подумал, что добавлю почему.
Это та же проблема, что и для грязных полотен и временной атаки, которая была устранена вскоре после поставки WebGL
С Canvas 2d вы можете рисовать изображения на холсте с помощью ctx.drawImage(someImage, ...)
; Проблема возникает из междоменных изображений. Обычно JavaScript не может прочитать пиксели внутри изображения. Он может читать пиксели внутри холста. Итак, чтобы получить пиксели из изображения, сначала вы рисуете изображение на холсте, а затем считываете пиксели с холста ctx.getImageData(...)
Это проблема безопасности для междоменных изображений (изображений из доменов, отличных от домена страницы).
Решение для canvas 2d - это момент, когда вы рисуете междоменное изображение на 2d canvas, холст которого внутренне помечен как dirty , и оба ctx.getImageData
и canvas.toDataURL
вызовут ошибку безопасности. 1015 *
Первоначально WebGL следовал тому же правилу. Если вы позвоните gl.texImageXXX
с междоменным изображением или грязным холстом, холст webgl будет помечен как dirty и gl.readPixels
, а также canvas.toDataURL
не будет работать.
Умные люди отметили, что в случае с WebGL этого было недостаточно, потому что даже если вы не смогли бы вызвать gl.readPixels
, вы могли бы разработать шейдер, который занимает больше времени, основываясь на цветах текстур, к которым он обращается. Используя это, вы можете определить время, необходимое для доступа к пикселям текстуры и эффективного восстановления содержимого изображения.
Решением было то, что WebGL по умолчанию не разрешает изображения с перекрестным происхождением. Вместо этого вы должны запросить разрешение CORS (совместное использование ресурсов между источниками) с другого сервера. Только если оно дает разрешение, WebGL может использовать изображение.
Хорошо, после всего этого, надеюсь, вы поймете, почему вы не можете рендерить HTML в WebGL. Если бы вы могли визуализировать HTML как холст, вы могли бы использовать вышеописанные методы для чтения содержимого этого HTML, включая встроенные фреймы и т. Д., Грязные холсты, изображения из других доменов и т. Д. ...