我正在尝试在扩展程序中使用libsodium.js库,到目前为止,仅在Chrome(当前版本为71)中进行了测试。
到目前为止,它在标准网页上下文中均可正常运行,但是当我尝试将其加载到扩展程序中时,出现错误。无论是作为脚本加载,还是我在清单中定义一个页面作为唯一脚本并将脚本设为异步(实际上与浏览器页面中的脚本相同):
<script src="dist/browsers/sodium.js" async></script>
我在扩展名中只收到相同的错误,而在网页中却没有。错误是:
未捕获(承诺)TypeError:s不是函数
据我所知,当页面为扩展加载时,似乎有一个尚未解决的promise包含函数,但是网页已正确解决了。也许我是错的,因为Emscripten生成了8200多个代码行,因此通读有点笨拙。我似乎在扩展文档中找不到任何答案,或者在我进行的大量谷歌搜索中找不到。
有人可以指出正确的方向来解决这个问题吗?
答案 0 :(得分:1)
此问题的答案是扩展具有更严格的内容安全策略。它们将不允许执行eval或类似eval的函数。显然,在此库的Web程序集中,至少有一个这样的功能阻碍了成功的希望。
解决方案可以在这里找到:https://developer.chrome.com/extensions/sandboxingEval
它确实可以来回发送消息,并且iframe确实可以访问来自promise的库/结果代码。
我希望这也会对其他人有所帮助,如果需要进行编辑或澄清,请告诉我。