对于某些Web应用程序,libsodium无法在wkWebview iOS中初始化

时间:2016-04-04 22:15:36

标签: javascript jquery ios wkwebview libsodium

我正在使用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的存在并不顺利。

猜出弹出的第一个问题:

  • 我们可以让libsodium不依赖于JQuery(即使它存在)。 (没找到任何东西)。
  • 如果存在AMD import,则在libsodium上找到一些关于使用libsodium wrapper的文档。如下:

    var sodium = require(' libsodium-wrappers');

这不好。这导致异常:无法加载库或其依赖项。

欢迎任何建议/指示让这个工作。感谢。

0 个答案:

没有答案