2009-06-24 2 views
3

Я пытаюсь полувосстановить использование Mozilla demo JavaScript + <video> + <canvas> с файлами, которые не размещены на сервере.Как обойти одно и то же нарушение политики происхождения для одного локального файла другому?

Загрузка моего документа вызывает консоль ошибок, чтобы сообщить об ошибке:

Error: uncaught exception: [Exception... "Security error" code: "1000" nsresult: "0x805303e8 (NS_ERROR_DOM_SECURITY_ERR)" location: "file:///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 ref erences это (довольно скучный) элемент:

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

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

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

ответ

1

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

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

4

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

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

Там может быть решение с использованием Firefox's "per-file permission", но я не уверен, что это на самом деле стоит, учитывая, как дешево это запустить локальный HTTP-сервер ... (YMMV)

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^