在浏览器扩展中使用libsodium.js

时间:2018-12-14 03:53:23

标签: javascript google-chrome-extension libsodium

我正在尝试在扩展程序中使用libsodium.js库,到目前为止,仅在Chrome(当前版本为71)中进行了测试。

到目前为止,它在标准网页上下文中均可正常运行,但是当我尝试将其加载到扩展程序中时,出现错误。无论是作为脚本加载,还是我在清单中定义一个页面作为唯一脚本并将脚本设为异步(实际上与浏览器页面中的脚本相同):

<script src="dist/browsers/sodium.js" async></script>

我在扩展名中只收到相同的错误,而在网页中却没有。错误是:

  

未捕获(承诺)TypeError:s不是函数

据我所知,当页面为扩展加载时,似乎有一个尚未解决的promise包含函数,但是网页已正确解决了。也许我是错的,因为Emscripten生成了8200多个代码行,因此通读有点笨拙。我似乎在扩展文档中找不到任何答案,或者在我进行的大量谷歌搜索中找不到。

有人可以指出正确的方向来解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

此问题的答案是扩展具有更严格的内容安全策略。它们将不允许执行eval或类似eval的函数。显然,在此库的Web程序集中,至少有一个这样的功能阻碍了成功的希望。

解决方案可以在这里找到:https://developer.chrome.com/extensions/sandboxingEval

它确实可以来回发送消息,并且iframe确实可以访问来自promise的库/结果代码。

我希望这也会对其他人有所帮助,如果需要进行编辑或澄清,请告诉我。