3

私はobjective-Cにはかなり慣れていないので、おそらく知らないので、知っているとは思わないでください:)。

ウェブビューを備えた Mac (iOS ではない) 用のココア アプリケーションがあります。Webview には、ミニ メッセージング クライアントとして機能するサイトがあります。メッセージが受信されたら、javascript で目的の c にメッセージが受信されたことを通知したいと思います...そして目的の c は、うなるポップアップを作成するなどのコードを実行します。

Apple Developer Web サイトのWebView Class Referenceを見ましたが、適切に実装する方法がよくわかりません。

4

1 に答える 1

4

あなたが探しているのは、参照ドキュメント「Calling Objective-C Methods From Javascript」(参照)です。

基本的に要約すると、Objective-C クラスを JavaScript スクリプト環境に明示的に公開する必要があります。非公式プロトコルは、これWebScriptingを行うためにカスタム オブジェクトを公開するために実装するプロトコルです。

公開したいオブジェクト (「通知オブジェクト」など) が javascript に実装され+ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector;たら+ (BOOL)isKeyExcludedFromWebScript:(const char *)name;、webview のコントローラー/デリゲートは、オブジェクトを javascript で使用できるようにする必要があります。

たとえば、webView インスタンスのFrame Load Delegateで:

- (void)webView:(WebView *)sender didClearWindowObject:(WebScriptObject *)windowObject forFrame:(WebFrame *)frame {
     // Create the Obj-C object you want JS to be able to access
     CustomNotificationCenter *noteCenter = [CustomNotificationCenter sharedNotificationCenter];
     // Get the script object that corresponds to "window" in JS
     id win = [sender windowScriptObject];
     // Add our noteCenter as a property of "window" called "customNotifications"
     [win setValue:noteCenter forKey:@"customNotifications"];
}

そして、すべてを正しく行っていれば、Objective-C オブジェクトを Javascript で使用できるはずです。たとえば、「printNotification:」という名前のメソッドを に公開した場合noteCenter、Javascript では次のように動作します。

function messageReceived(messageText) {
     window.customNotifications.printNotification_("Notification!" + messageText);
}

そしてもちろん、Growl を使用してカスタム Obj-C オブジェクトと の実装で通知を表示しますprintNotification。(Mountain Lion を使用している場合は、新しい通知センターも素晴らしいものです)。それが役立つことを願っています。

于 2012-08-09T17:04:04.053 に答える