2016-04-18 1 views
2

Играя немного с помощью websharper и пыталась получить демо-версию webgl в моей системе. Я модифицировал данный демо-код, чтобы использовать его в приложении SinglePage. Кроме того, я изменил текстуру, используемую демо, к текстуре, которая у меня есть на моей системе.websharper webgl demo security issue?

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: Failed to execute 'texImage2D' on 'WebGLRenderingContext': The cross-origin image at file:///E:/R/playground/ConsoleApplication7/SinglePageApplication1/mandel.jpg may not be loaded.

Microsoft края, с другой стороны, успешно работает и производит ожидаемый результат.

Теперь, конечно, интересно, как .jpg в том же пути, что и остальные могут вызвать ошибку безопасности в Google Chrome.

Кроме того, я задаюсь вопросом, есть ли у меня шанс запустить его в Google Chrome, так или иначе ...

Я также пробовал другие места для mandel.jpg, например, рядом с ... min.js. Но во всех местах произошла такая же ошибка.

ответ

2

Chrome применяет очень строгую политику такого же происхождения на локальных веб-страницах in order to protect you from attacks where you may open a malicious webpage locally, for example because someone sent it to you as an email attachment.

Другими словами, предположим, что файл SinglePageApplication1.min.js был отправлен вам неизвестным источником. Должна ли разрешаться загружать (и потенциально отслеживать/изменять) файл mandel.jpg? Возможно, вам просто удалось положить файл .js в папку Documents, а mandel.jpg - это частный документ, который вы также сохранили там. Так что Chrome говорит nope, не может получить доступ к этому.

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

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

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

+0

Имеет смысл - ответ, но в моих глазах это очень ра которые они сделали. Таким образом, серверный HTML-код в порядке, пока он не загрузится ... um ... no ... загрузка скриптов работает ... и ... загрузка файлов css ... но никак не загружает изображение? На мой взгляд, они должны преодолеть это и отказаться от загрузки чего-либо из локальной файловой системы. – BitTickler

+0

проблема * кто * делает загрузка. Chrome доверяет * своему собственному механизму рендеринга * для загрузки и отображения файла без каких-либо вредоносных (duh), но он не знает, что делает какой-то случайный скрипт * действительно *. Таким образом, тег '' поиск другого файла будет отображаться просто отлично, но скрипт не может ни загрузить изображение напрямую, ни получить доступ к содержимому этого тега (который имеет другое происхождение). – piaste

+0

Что он сказал, но ** НЕ ПОЛЬЗУЙТЕ ЭТО ФЛАГ !!! ЕСТЬ ПРИЧИНА, ЧТО ЭТО СУЩЕСТВУЕТ * «Вам не нужно больно больно устанавливать серверы, такие как Suave или IIS. Если вы используете Linux или OSX, просто подключитесь к папке с вашими файлами и наберите« python -m SimpleHTTPServer ». re на любой ОС другой вариант - [devd] (https://github.com/cortesi/devd). Super Simple. Небольшой файл, он просто работает. – gman