cocoa插件调用网页javascript

发布于 2024-11-18 22:38:52 字数 469 浏览 1 评论 0原文

我有一个嵌入 html 页面的可可插件。该页面还在标题中定义了一个 javascript 函数。我想从我的插件中以编程方式调用这个 javascript 函数。在 IE/firefox/chrome 插件下这很容易。这在 cocoa/safari 下是如何工作的?我认为问题归结为访问页面 webview 并获取 webScriptObject。一旦我有了这个,我就可以使用“callWebScriptMethod” af 如下:

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

但是,我不知道如何访问托管我的插件的页面的 webview。我的插件被定义为“WASafariPluginView:NSView”,并且我在其对象层次结构中没有看到任何可用于获取“父”Web 视图的内容。

谢谢,

I have a cocoa plugin embedded on an html page. This page also defines a javascript function in the header. I'd like to programmatically call this javascript function from my plugin. This was easy enough under IE/firefox/chrome plugins. How does this work under cocoa/safari? I think the problem comes down to accessing the pages webview and getting the webScriptObject. Once I have this I can use "callWebScriptMethod" af follows:

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

However, I don't know how to access the webview of the page hosting my plugin. My plugin is defined as "WASafariPluginView : NSView " and I don't see anything in its object hierarchy I can use to obtain the "parent" webview.

Thanks,

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

谁的年少不轻狂 2024-11-25 22:38:52

实例化插件视图时,WebKit 会调用视图主类的 +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];
}

When your plug-in view is instantiated, WebKit calls the +plugInViewWithArguments: method of your view's main class.

The arguments parameter to that method is a dictionary that you can query for various information. In your case, you want the object corresponding to the WebPlugInContainerKey.

This is an object conforming to the WebPlugInContainer informal protocol. If it is not nil, you can ask this object for its -webFrame, which returns a WebFrame object. You can then ask the WebFrame object for its -webView.

You can then instantiate your plug-in and store a reference to the 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];
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文