2011-07-05 4 views
0

나는 HTML 페이지에 임베디드 코코아 플러그인이 있습니다. 이 페이지는 또한 헤더에 javascript 함수를 정의합니다. 프로그래밍 방식으로 내 플러그인 에서이 자바 스크립트 함수를 호출하고 싶습니다. 이것은 IE/firefox/chrome 플러그인에서 충분히 쉽습니다. 이 방법은 코코아/사파리에서 어떻게 작동합니까? 나는이 문제가 페이지 webview에 접근하고 webScriptObject를 얻는 것에 있다고 생각한다. 나는 이것이 내가 사용할 수 있습니다 일단 "callWebScriptMethod"AF는 다음과 같습니다코코아 플러그인 웹 페이지 자바 스크립트를 호출

[scriptObject callWebScriptMethod:@"sayHello" withArguments:[NSArray arrayWithObjects:"@chris"]]; 

그러나, 내 플러그인을 호스팅하는 페이지의 웹보기에 액세스하는 방법을 모르겠어요. 내 플러그인은 "WASafariPluginView : NSView"로 정의되어 있으며 "상위"웹 뷰를 가져 오는 데 사용할 수있는 개체 계층 구조에 아무 것도 표시되지 않습니다.

감사합니다,

플러그인에서보기가 인스턴스화

답변

1

는 웹킷은 뷰의 메인 클래스의 +plugInViewWithArguments: 메소드를 호출합니다.

해당 메서드의 arguments 매개 변수는 다양한 정보를 쿼리 할 수있는 사전입니다. 귀하의 경우 WebPlugInContainerKey에 해당하는 개체를 원할 것입니다.

이것은 비공식 프로토콜 WebPlugInContainer을 준수하는 개체입니다. nil이 아니면이 오브젝트에 -webFrame을 요청하여 WebFrame 오브젝트를 리턴 할 수 있습니다. 그런 다음 WebFrame 개체에 -webView을 요청할 수 있습니다. 그러면 WebView에 대한 참조를 저장할 수 있습니다.

YourPluginView.h :

#import <Cocoa/Cocoa.h> 
#import <WebKit/WebKit.h> 

@interface YourPluginView : NSView <WebPlugInViewFactory> 
{ 
    WebView* webViewIvar; 
} 

- (id)initWithWebView:(WebView *)aWebView; 
@end 

YourPluginView.m :

//the WebPlugInViewFactory protocol required method 
+ (NSView *)plugInViewWithArguments:(NSDictionary *)arguments 
{ 
    WebView* containerView = [[[arguments objectForKey:WebPlugInContainerKey] webFrame] webView]; 
    YourPluginView* view = [[self alloc] initWithWebView:containerView]; 
    return view; 
} 

- (id)initWithWebView:(WebView *)aWebView 
{ 
    self = [super init]; 
    if(self) 
    { 
     webViewIvar = [aWebView retain]; 
    } 
    return self; 
} 

- (void)dealloc 
{ 
    [webViewIvar release]; 
    [super dealloc]; 
} 
+0

덕분에,이 내가 찾던 정확히 않습니다. – Chris