События загрузки модуля в NaCl с manifest_version = 2 и без встроенного javascript

Я обновил свой manifest_version до "2" в соответствии с этим документом, а затем был удивлен чтобы увидеть, как хром выдает такие ошибки, как:

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

Хотя понятно, почему они это делают, теперь я не понимаю, как мне управлять загрузкой модуля события прогресса. Даже если я верну его к последнему (dev) выпуску перца, документация по-прежнему рекомендует встроенный скрипт (который, очевидно, не работает).

Я немного расстроен (после того, как провел день выходных, кодируя загрузку модуля с прогрессом), чтобы увидеть, как эта версия переворачивается и делает мои вещи полностью недействительными.

Так что, да... это для большего блага. Я понимаю. Но теперь мне нужно иметь отдельный файл javascript (с собственной парадигмой загрузки) и вовремя подключаться к элементу <embed/>, чтобы правильно отлавливать события? Каков новый и улучшенный метод для этого сейчас?

Может ли кто-нибудь предложить надежную альтернативу этому санкционированному шаблону?


person el2iot2    schedule 04.08.2012    source источник
comment
Я понимаю, что это единственный разрешенный механизм javascript для новой manifest_version, и я понимаю основную проблему (ответ на повторяющийся вопрос). Мой вопрос не в том, что не так со старым способом... а в том, как (новый и рекомендуемый) способ использовать внешний файл javascript и никогда не пропускать событие загрузки <embed/> для модуля nacl?   -  person el2iot2    schedule 05.08.2012


Ответы (1)


Согласно документации по событиям прогресса NaCl , прослушиватели событий должны быть добавлены следующим образом:

<div id="listener">
  <script type="text/javascript">
    document.getElementById('listener').addEventListener('load', function() {
        // Example
    }, true);
  </script>
  <embed name="nacl_module" ... type="application/x-nacl" />
</div>

Это, если запрещено политикой безопасности содержимого (см. также). Есть только один способ решить эту проблему: переместив скрипт во внешний файл:

<div id="listener">
  <script src="listener-load.js"></script>
  <embed name="nacl_module" ... type="application/x-nacl" />
</div>

// listener-load.js:
document.getElementById('listener').addEventListener('load', ..., true);

Поскольку построение DOM блокируется до тех пор, пока не будет загружен внешний файл, сценарий загружается до того, как будет вставлен тег <embed>. Поскольку внешние файлы упакованы с расширением, их влиянием на производительность можно пренебречь.

person Rob W    schedule 04.08.2012
comment
Часть, которую мне не хватало, заключалась в построении блоков DOM до тех пор, пока внешний файл не будет загружен (я не делал много работы с js, поэтому я предполагал, что внешний файл должен быть в <head/> и пропустил, что я все еще мог иметь встроенный тег <script/>). Спасибо за объяснение не только как это сделать, но и почему это будет подходящим решением. Очень признателен. - person el2iot2; 05.08.2012