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 говорит нет, не могу получить к этому доступ.

Для целей разработки у вас есть два варианта, как подробно описано здесь:

  1. Отключите меры безопасности, запустив Chrome с --allow-file-access-from-files флаг

  2. Установите SPA на локальном веб-сервере (Suave или IIS) и получите к нему доступ через http://localhost/

Другие вопросы по тегам