websharper webgl демонстрационная проблема безопасности?
Немного поиграв с websharper и попытался запустить демо webgl на моей системе. Я изменил данный демонстрационный код так, чтобы я мог использовать его в приложении SinglePage. Кроме того, я изменил текстуру, используемую в демо-версии, на текстуру, которая у меня есть в моей системе.
let MakeAndBindTexture (gl : WebGL.RenderingContext) f =
Img []
|>! Events.OnLoad (fun img ev ->
let tex = gl.CreateTexture()
gl.ActiveTexture(gl.TEXTURE0)
gl.BindTexture(gl.TEXTURE_2D, tex)
gl.PixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 1)
gl.TexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, img.Dom)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)
f ())
|> fun img -> img -< [Attr.Src "mandel.jpg"] // <<-- located in project root
|> ignore
Тестируя его с помощью Google Chrome, (без участия веб-сервера - запустив index.html из корневой папки проекта, я получаю следующий журнал ошибок:
SinglePageApplication1.min.js: 42 Uncaught SecurityError: Не удалось выполнить 'texImage2D' для 'WebGLRenderingContext': изображение перекрестного происхождения в файле:///E:/R/playground/ConsoleApplication7/SinglePageApplication1/mandel.jpg не может быть загружено,
Microsoft Edge, с другой стороны, успешно работает и дает ожидаемый результат.
Теперь, конечно, мне интересно, как.jpg по тому же пути, что и остальные, может вызвать ошибку безопасности в Google Chrome.
Кроме того, мне интересно, если у меня есть шанс заставить его работать в Google Chrome, как-нибудь...
Я также пробовал другие места для файла mandel.jpg, например, рядом с файлом... min.js. Но все локации выдавали одну и ту же ошибку.
1 ответ
Chrome применяет очень строгую политику одного и того же источника на локальных веб-страницах , чтобы защитить вас от атак, когда вы можете открыть вредоносную веб-страницу локально, например, потому что кто-то отправил ее вам в качестве вложения электронной почты.
Другими словами, предположим, что файл SinglePageApplication1.min.js
был отправлен вам ненадежным источником. Если это будет разрешено загрузить (и, возможно, шпионить / изменить) файл mandel.jpg
? Может быть, вы просто поставили .js
файл в вашем Documents
папка и mandel.jpg
это личный документ, который вы также храните там. Так что Chrome говорит нет, не могу получить к этому доступ.
Для целей разработки у вас есть два варианта, как подробно описано здесь:
Отключите меры безопасности, запустив Chrome с
--allow-file-access-from-files
флагУстановите SPA на локальном веб-сервере (Suave или IIS) и получите к нему доступ через
http://localhost/