gpt4 book ai didi

javascript - 通过 WebScriptObject 将 Cocoa 对象暴露给 JS 脚本环境

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:21:45 24 4
gpt4 key购买 nike

我看到有几个类似的问题,但这是更基本的问题。

我正在尝试通过 WebScriptObject 向 WebView 公开一个简单的 Cocoa 对象,希望允许页面向 Cocoa 对象发送消息。关于此的文档非常清楚,但由于某种原因我无法让它工作。想知道你是否会看看...

这是我要加载到脚本环境中的对象。

@interface Client : NSObject {

NSString *test;

}

@implementation Client

- (id)init {

self = [super init];
test = [[NSString alloc] initWithString:@"Hey Simon"];
return self;

}

- (NSString *)test {

return test;
}

然后我将该对象加载到 WebView 的 frameLoad 委托(delegate)中,使用:

- (void)webView:(WebView *)webView didClearWindowObject:(WebScriptObject *)windowObject forFrame:(WebFrame *)frame {

Client *_client = [[Client alloc] init];
[windowObject setValue:_client forKey:@"client"];

}

在 JS 方面,我只是在做一些非常基础的事情:

if( 'client' in window ) {

var client = window.client;

console.log( '---' );

console.log( 'client.test(): ' + client.test() );

console.log( '---' );

}

JS 控制台显示 TypeError: Result of expression 'client.test' [undefined] is not a function.

一些事情。我知道该对象已正确加载到脚本环境中,因为它不会通过条件加上我可以看到描述:

console.log( 'Client object: ' + client )

但我只是不知道如何正确公开我的 cocoa 方法。看看我上面所说的,我在类中实现方法或在 JS 中调用它们的方式是否存在问题?

提前致谢,亚力克

最佳答案

它就在文档中。 :(

您必须在传入的对象上实现 + (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector。

所以在我的情况下,我必须写

+ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector

{
if (aSelector == @selector(test)) return NO;
return YES;
}

关于javascript - 通过 WebScriptObject 将 Cocoa 对象暴露给 JS 脚本环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5972322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com