JavaScript中任意Objective-C对象的访问方法和属性

JavaScript中任意Objective-C对象的访问方法和属性,javascript,objective-c,webkit,Javascript,Objective C,Webkit,我想访问Objective-C对象的属性和调用方法,该对象作为公开对象的属性返回到JavaScript主机([WindowsScriptObject setValue:self-forKey:@“a”]): 在Javascript中,我希望能够执行以下操作: // a is already exposed Objective-C object var b = a.b; // reference to myObject var c = a.b.c; // myObject.c var d = a.

我想访问Objective-C对象的属性和调用方法,该对象作为公开对象的属性返回到JavaScript主机(
[WindowsScriptObject setValue:self-forKey:@“a”]
):

在Javascript中,我希望能够执行以下操作:

// a is already exposed Objective-C object
var b = a.b; // reference to myObject
var c = a.b.c; // myObject.c
var d = a.b.d(); // [ myObject d ]

MyObject
需要实现
+isSelectorExcludedFromWebScript:
和/或
+IsKeyExcludeFromWebScript:
。默认情况下,Javascript不允许访问Objective-C方法;你必须明确地允许它

除此之外,你还有其他症状吗


有关更多信息,请参见。

MyObject
需要实现
+IsSelector Excluded fromWebScript:
和/或
+isKeyExcludedFromWebScript:
。默认情况下,Javascript不允许访问Objective-C方法;你必须明确地允许它

除此之外,你还有其他症状吗


有关更多信息,请参阅。

我已经阅读了所有这些内容。使用-valueForUndefinedKey:,setValue:forUndefinedKey:,-invokeUndefinedMethodFromWebScript:with arguments:可以将任意get、set和方法调用从JavaScript分派到Objective-C对象,如使用JavaScript中的Objective-C所示。我想进一步返回(通过
a.b.c
)另一个Objective-c对象到JavaScript主机。然后,您仍然需要确保MyObject允许JavaScript访问(这就是+isSelectorExcludedFromWebScript:的作用)。另外,这个Javascript是机器本地的还是来自网络的?授予远程Javascript对Cocoa进程的无限制访问权限会使产品非常难以安全,并允许攻击者以DNS欺骗(或各种其他常见攻击)的用户身份运行任意代码。如果Javascript存储在您自己的包中(就像Pandoraboy的Javascript桥一样),这不是问题。
-isSelectorExcludedFromWebScript:
-isKeyExcludedFromWebScript:
返回号。Javascript是本地的,我想在JS和核心应用程序代码之间建立更灵活的桥梁。那么你看到了什么问题?我不确定这是否是桥梁中的错误。如果将其转换为方法调用(将其设为b(),并将代码从WebScript:withArguments:移动到invokeUndefinedMethodFromWebScript:中),它将按预期工作。如果仅定义一个名为-b的方法,它也会工作。它仅在KVC例程中出现问题(valueForUndefinedKey:)。我怀疑此例程没有将结果包装到WebScript对象中。您可能需要在该对象上打开雷达(bugreport.apple.com)使用-valueForUndefinedKey:,setValue:forUndefinedKey:,-invokeUndefinedMethodFromWebScript:with arguments:可以将任意的get、set和方法调用从JavaScript发送到Objective-C对象,如使用JavaScript中的Objective-C所示(通过
a.b.c
)另一个Objective-c对象访问JavaScript主机。然后,您仍然需要确保MyObject允许JavaScript访问(这就是+isSelectorExcludedFromWebScript:的作用)。此外,此Javascript是计算机本地的还是来自网络?授予远程Javascript对Cocoa进程的无限制访问权限会使产品非常难以安全,并允许攻击者以DNS欺骗(或各种其他常见攻击)的用户身份运行任意代码。如果Javascript存储在您自己的包中,则这不是问题(如Pandoraboy的Javascript桥).
-isSelectorExcludedFromWebScript:
-isKeyExcludedFromWebScript:
返回号。JavaScript是本地的,我想在JS和核心应用程序代码之间建立更灵活的桥梁。那么你看到了什么问题?我不确定这是否是桥梁中的错误。如果你将其转化为方法调用(make it b()并将代码移动到invokeUndefinedMethodFromWebScript:withArguments:中的InvokeUndefinedMethod:它可以按预期工作。如果只定义一个名为-b的方法,它也可以工作。它只在KVC例程(valueForUndefinedKey:)中出现问题。我怀疑此例程没有将结果包装到WebScript对象中。您可能需要在该对象上打开雷达(bugreport.apple.com)。
// a is already exposed Objective-C object
var b = a.b; // reference to myObject
var c = a.b.c; // myObject.c
var d = a.b.d(); // [ myObject d ]