gpt4 book ai didi

javascript - cocoa插件调用网页javascript

转载 作者:行者123 更新时间:2023-12-03 18:00:49 26 4
gpt4 key购买 nike

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

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

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

谢谢

最佳答案

实例化插件 View 时,WebKit 会调用 View 主类的 +plugInViewWithArguments: 方法。

该方法的arguments参数是一个字典,您可以查询各种信息。在您的情况下,您需要与 WebPlugInContainerKey 对应的对象。

这是一个符合WebPlugInContainer非正式协议(protocol)的对象。如果不是 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];
}

关于javascript - cocoa插件调用网页javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6585103/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com