javascript - 从原生 ios 代码调用 javascript 函数(位于参数中)

标签 javascript ios

我有这样的 JavaScript 函数。

function getState(){
   return "Hello";
}

var cryptico = (function() {

var my = {};

    my.generateRSAKey = function(passphrase, bitlength)
    {
        Math.seedrandom(sha256.hex(passphrase));
        var rsa = new RSAKey();
        rsa.generate(bitlength, "03");
        return rsa;
    }

}());

如果函数在外部,我可以像这样轻松调用。

NSString *jsPath = [[NSBundle mainBundle] pathForResource:@"cryptico" ofType:@"js"];

NSString *scriptString = [NSString stringWithContentsOfFile:jsPath encoding:NSUTF8StringEncoding error:nil];

JSContext *context = [[JSContext alloc] init];
context = [[JSContext alloc] init];
[context evaluateScript:scriptString];

JSValue *test10 = context[@"getState"];
JSValue *test11 = [test10 callWithArguments:@[]]; //will be Hello

但是我怎样才能调用变量内部的东西呢?我尝试了很多不同的方法,但都不行。

最佳答案

根据 JSValue Apple 文档:

Objective-C block (Swift clousre) 和 javascript 函数应使用

相互转换
valueWithObject:inContext:

转换为 JSValue,就像您在代码中所做的那样,并且

toObject

转换为其实际类型,在本例中为 block 。所以先尝试一下

[test10 toObject];

并存储到一个 block ,然后正常调用该 block

关于javascript - 从原生 ios 代码调用 javascript 函数(位于参数中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44927668/

相关文章:

javascript - HTML 单选输入,带有(必需)文本选项 "other"

javascript - 如何在没有浏览器的情况下测试 rails javascript 和 ajax

ios - 我如何将 swrevealview 作为第三个 View Controller ,如果我们将 swrevealview 作为初始 View Controller 其工作

ios - 截取 UIView iOS 的屏幕截图

javascript - jquery 的显示/隐藏功能如何工作?

javascript - 如何将添加的项目设置为事件对象?

javascript - Suitescript 努力应对使用 CORS 的第三方出站 API 调用

iphone - 插入 UIImageView 作为 subview 滞后

ios - 使用 iTunesConnect TestFlight 添加测试人员

ios - uiswitch 状态改变问题