Как обойти одно и то же нарушение политики происхождения для одного локального файла в другом? - PullRequest
3 голосов
/ 25 июня 2009

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

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

Ошибка: необработанное исключение: [Исключение ... "Ошибка безопасности" код: "1000" nsresult: "0x805303e8 (NS_ERROR_DOM_SECURITY_ERR)" location: "файл: /// media / disk / javascript / html5 / chromakey / chromakey1. htm Line: 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 ]

4 голосов
/ 25 июня 2009

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

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

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

1 голос
/ 25 июня 2009

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

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

0 голосов
/ 28 ноября 2016

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...