我根据 this document 将 manifest_version 升级为“2” ,然后惊讶地看到 chrome 出现如下错误:
Refused to execute inline script because it violates the following Content Security Policy directive
虽然很清楚他们为什么要这样做,但我现在不清楚我应该如何管理模块加载 progress events .即使我将其升级到最新的 (dev) pepper 版本,文档仍然推荐使用内联脚本(这显然不起作用)。
看到这个版本翻转并使我的东西完全无效,我有点沮丧(在花了一个周末下午编写一个模块加载进度之后)。
所以,是的......这是为了更大的利益。我明白。但现在我必须有一个独立的 javascript 文件(具有自己的加载范例)并连接到 <embed/>
元素及时正确捕捉事件?现在执行此操作的新方法和改进方法是什么?
谁能推荐一个可靠的替代方案来替代这个经过批准的样板文件?
最佳答案
根据documentation for NaCl progress events , 必须按如下方式添加事件监听器:
<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>
如果内容安全策略 (see also) 禁止,则此操作。只有一种方法可以解决它:将脚本移动到外部文件:
<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>
之前加载。标签被插入。由于外部文件与扩展一起打包,因此对性能的影响可以忽略不计。
关于javascript - Manifest_version = 2 且无内联 javascript 的 NaCl 中的模块加载进度事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11811681/