我正在使用libsodium库对浏览器扩展(chrome和safari)进行加密,以加密从网页中检索到的数据。 我也在iOS wkWebView浏览器中使用它,它适用于大多数网络应用程序。
我所要做的就是从https://github.com/jedisct1/libsodium.js/tree/master/dist/browsers/combined
获取sodium.js文件将其添加到项目中并开始使用它(不详细说明如何将js文件注入到webview或扩展中)。
例如
sodium.crypto_secretbox_easy(msg, nonce, key)
这适用于扩展,主要适用于iOS。 但是对于iOS webview上的一些网络应用程序,开始遇到以下问题:
未定义导出'钠'。 在进一步调试sodium.js代码时发现失败是因为钠代码检查函数'define'是否存在,如果是,则使用自己的'factory'参数调用该函数。检查sodium.js的代码片段:
if (typeof define === "function" && define.amd) {
define(["exports"], factory);
} else if (typeof exports === 'object' &&
typeof exports.nodeName !== 'string') {
factory(exports);
} else {
factory(root.libsodium = {});
}
这是无法初始化'钠'出口的情况。 看起来函数'define'是JQuery的一部分,它很可能是由webview中的活动Web应用程序定义的 一个成功的场景是'define'不存在,它最后直接调用'factory'函数,正确地初始化'sodium'导出。
总结一下:Libsodium库在初始化其代码之前查找JQuery / AMD定义。如果它发现它调用JQuery'define'来初始化它的代码。以某种方式依赖于JQuery的存在并不顺利。
猜出弹出的第一个问题:
如果存在AMD import,则在libsodium上找到一些关于使用libsodium wrapper的文档。如下:
var sodium = require(' libsodium-wrappers');
这不好。这导致异常:无法加载库或其依赖项。
欢迎任何建议/指示让这个工作。感谢。