JavascriptCore 没有正确调用带有参数的函数
JavascriptCore isn't calling function with arguments properly
我制作了一个 iOS 应用程序来安装和 运行 javascript 脚本,为此,我正在使用 JavascriptCore。我的一些脚本是周期性的,这意味着它们每 X 秒启动一次。
伪代码示例:
every('X seconds', function(event) {
save(event.timestamp);
});
到目前为止,一切都很好,直到我意识到几分钟后(~3 分钟)我调用的函数开始忽略我的参数。我在 save
方法中得到 "undefined" ! 它工作了一段时间然后...
Objective-c代码:
[_executionContext evaluateScript:[NSString stringWithFormat:@"var myFunc = %@", _script]];
[_executionContext[@"myFunc"] callWithArguments:@[event.data]];
说明
- 我评估
function(event) { ... }
(script
) 字符串并将其保存在 myFunc
对象中。
- 我用我的
event.data
调用这个函数,它公开了时间戳。简单!
请注意,即使 event.timestamp
returns 未定义,我的 event.data
对象也不是 nil !而且我在我的 objective-c 代码中没有发现任何错误。我认为 callWithArguments 方法中发生了一些事情,或者我遗漏了一些东西...
数据接口:
@protocol DataExports<JSExport>
@property (nonatomic) long timestamp;
@end
@interface APSData : MTLModel<DataExports>
@end
我在设备和模拟器上遇到了同样的问题。
我做错了什么吗?
此致,
好的,我找到了解决方案!
我没有在每次事件发生时在我的函数上使用 evaluationScript
,而是将它保存在地图中一次,然后我用它来调用我的函数。所以基本上:
[_executionContext evaluateScript:[NSString stringWithFormat:@"var %@ = %@", _functionHash, _script]];
_functionMap[_functionHash] = [_executionContext evaluateScript:_functionHash];
需要时,我会打电话给:
[_functionMap[_functionHash] callWithArguments:@[event.data]];
对我来说,这与我之前所做的没有什么不同,但似乎效果更好...
编辑:好吧……这真的行不通。现在它在 10 分钟后失败了..
我制作了一个 iOS 应用程序来安装和 运行 javascript 脚本,为此,我正在使用 JavascriptCore。我的一些脚本是周期性的,这意味着它们每 X 秒启动一次。
伪代码示例:
every('X seconds', function(event) {
save(event.timestamp);
});
到目前为止,一切都很好,直到我意识到几分钟后(~3 分钟)我调用的函数开始忽略我的参数。我在 save
方法中得到 "undefined" ! 它工作了一段时间然后...
Objective-c代码:
[_executionContext evaluateScript:[NSString stringWithFormat:@"var myFunc = %@", _script]];
[_executionContext[@"myFunc"] callWithArguments:@[event.data]];
说明
- 我评估
function(event) { ... }
(script
) 字符串并将其保存在myFunc
对象中。 - 我用我的
event.data
调用这个函数,它公开了时间戳。简单!
请注意,即使 event.timestamp
returns 未定义,我的 event.data
对象也不是 nil !而且我在我的 objective-c 代码中没有发现任何错误。我认为 callWithArguments 方法中发生了一些事情,或者我遗漏了一些东西...
数据接口:
@protocol DataExports<JSExport>
@property (nonatomic) long timestamp;
@end
@interface APSData : MTLModel<DataExports>
@end
我在设备和模拟器上遇到了同样的问题。
我做错了什么吗?
此致,
好的,我找到了解决方案!
我没有在每次事件发生时在我的函数上使用 evaluationScript
,而是将它保存在地图中一次,然后我用它来调用我的函数。所以基本上:
[_executionContext evaluateScript:[NSString stringWithFormat:@"var %@ = %@", _functionHash, _script]];
_functionMap[_functionHash] = [_executionContext evaluateScript:_functionHash];
需要时,我会打电话给:
[_functionMap[_functionHash] callWithArguments:@[event.data]];
对我来说,这与我之前所做的没有什么不同,但似乎效果更好...
编辑:好吧……这真的行不通。现在它在 10 分钟后失败了..