- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我看到有几个类似的问题,但这是更基本的问题。
我正在尝试通过 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/
当 WebView 实例中的 JavaScript 与 WebViewDelegate 之间进行通信时,JavaScript 类型和 Objective-C 类型会来回转换。例如,当从 JavaScr
WebKit 框架的 WebView 类具有访问当前 WebScriptObject 的属性。我知道你可以使用这个对象调用JS方法,但是有没有办法接收异步JS回调通知? 我想在 WebView 中渲染
我正在 WebKit 实例中的 Cocoa 中执行 javascript。然后,我从执行的脚本中检索一个数组并迭代它。我知道有时其中一项可能为空,但我不确定如何检查它是否为空。 id lintObje
我正在使用 MonoTouch 和 UIWebView 构建类似 phonegap 的解决方案。我想通过 Javascript 公开一些 C# 方法。我知道您可以使用 WebScriptObject
我决定改变我在 Cocoa 应用程序中实现打印的方式,方法是让我的应用程序在嵌入式 webview 中向网页提供字符串数据,然后打印该 webview/frame。 问题是我的代码没有被调用,而且我没
我看到有几个类似的问题,但这是更基本的问题。 我正在尝试通过 WebScriptObject 向 WebView 公开一个简单的 Cocoa 对象,希望允许页面向 Cocoa 对象发送消息。关于此的文
我是一名优秀的程序员,十分优秀!