Как обойти одно и то же нарушение политики происхождения для одного локального файла в другом?

Я пытаюсь воссоздать демонстрационное использование Mozilla JavaScript + <video> + <canvas> с файлами, которые не размещены на сервере.

При загрузке моего документа консоль ошибок сообщает об этой ошибке:

Ошибка: необработанное исключение: [Исключение... "Ошибка безопасности" код: "1000" nsresult: "0x805303e8 (NS_ERROR_DOM_SECURITY_ERR)" location: "file:///media/disk/javascript/html5/chromakey/chromakey1.htm Строка: 23"]

Вот строка 23:

this.referenceImageData = this.bCtx.getImageData(0, 0, this.bufferCanvas.width, this.bufferCanvas.height);

Он пытается получить данные изображения с холста, на который я ранее скопировал кадр видео следующим образом:

this.bCtx.drawImage(this.inputElement,
    0, 0,
    this.inputElement.width, this.inputElement.height,
    0, 0,
    this.bufferCanvas.width, this.bufferCanvas.height
);

куда this.inputElement ссылается на этот (довольно скучный) элемент:

<video id="MainInput" src="320x240.ogg" width="320" height="240"></video>

Есть ли способ обойти эту ошибку, не подписывая мой код с помощью JAR?

Я думаю, что это связано с той же самой политикой происхождения Firefox ( https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript), имеющей проблему с локальным доступом к файлам, но я не могу понять, куда идти дальше.

3 ответа

Из файловой системы каждый файл имеет различное происхождение (это предотвращает доступ, например, /etc/passwd - скажем, используя XMLHttpRequest или iframe, а затем передать данные на некоторый сервер в Интернете, используя строку запроса при загрузке <img> или автоматическая отправка формы через JavaScript). См. http://tools.ietf.org/html/draft-abarth-origin (здесь говорится о "значении, определяемом реализацией", и проще всего иметь отдельный источник для каждого файла)

Самый простой способ обойти вашу проблему - запустить HTTP-сервер.

Возможно, есть решение, использующее "разрешение на файл" в Firefox, но я не уверен, что оно действительно того стоит, учитывая, как дешево запускать локальный HTTP-сервер... (YMMV)

Исходную политику Firefox для доступа к файлам можно изменить в "about:config". Чтобы устранить ту же политику происхождения в файле: URI, измените "true" значение security.fileuri.strict_origin_policy на false. Mozilla; о:config; настройка origin_policy

Вам нужно получить доступ к файлу из того же источника, и я думаю, что протокол file:// очень ограничен по очевидным причинам безопасности.

Только расширения могут получить доступ к этим файлам с большими привилегиями.

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