2011-07-05 13 views
0

我有一個嵌入在html頁面上的可可插件。此頁面還在標題中定義了一個javascript函數。我想以編程方式從我的插件調用此JavaScript函數。在IE/firefox/chrome插件下這很容易。這是如何工作在可可/ safari下?我認爲問題歸結爲訪問webview頁面和獲取webScriptObject。一旦我有這個,我可以用「callWebScriptMethod」 AF如下:可可插件調用網頁javascript

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

不過,我不知道如何訪問託管我的插件頁面的網頁流量。我的插件被定義爲「WASafariPluginView:NSView」,我沒有看到任何可用於獲取「父」webview的對象層次結構。

感謝,

回答

1

當你的插件視圖被實例化,WebKit的調用您的視圖的主類的+plugInViewWithArguments:方法。

該方法的參數參數是一個字典,您可以查詢各種信息。在你的情況下,你需要對應於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