gpt4 book ai didi

cocoa - Safari 5.1 npapi 问题

转载 作者:行者123 更新时间:2023-12-03 17:29:40 25 4
gpt4 key购买 nike

几天来,我一直在尝试解决以下问题,阅读了我在网上找到的所有有关 mac 上 npapi 的内容。

目标是拥有一个适用于 safari 和 firefox(mac) 的 npapi 插件。我的软件(我不能为此专门重写,有大约 45000 行 C 代码)是基于附加到 NSDocument 的 NSView....

我有一个基于 webkit 版本的插件,我必须基于相同的 NSView 对其进行垃圾处理(感谢 Apple!)。

我有一个 npapi 版本的插件,可以在 Firefox 上正常运行。在这个 npapi 插件中,我采用了 Carbon 窗口引用,并基于此创建了一个 NSWindow: NSWindow *browserWindow = [[[NSWindow alloc] initWithWindowRef:wind]autorelease];

我把我的 NSView 放在这个窗口上并且可以工作。

现在的问题是我不能在 safari 上做同样的事情。

看附图,窗口不在 safari 的窗口中! the firefox window is between safari's window and my plugin window

我尝试了多种方法...但不起作用。 cocoa 的咕噜能告诉我哪里做错了吗?或者这是一个已知问题?

NPError NPP_SetWindow(NPP 实例,NPWindow* 窗口){

NP_CGContext *ctx = 窗口->窗口; void *wind = ctx->窗口;

...在 NSView 初始化函数中:

NSWindow *browserWindow = [[NSWindow alloc] initWithWindowRef:wind];
self = [super initWithFrame:frame];
if( self )
{
[browserWindow makeFirstResponder: self];
[self setNextResponder: nil];
[browserWindow setContentView:self];
[self webPlugInInitialize];// my own initializing
}
return self;

最佳答案

在 Safari 5.1 中,网页渲染不是由 Safari 本身完成,而是在不同的进程上完成,以增强安全性。打开事件监视器,您会看到名为“Safari Web Process”或类似内容的后台进程。

因此,您不能也不应该基于可在 NPAPI 插件中获取的 Carbon 窗口引用创建 NSWindow。阅读 Apple's own documentation关于这一点。您应该请求核心图形绘制方法,然后 NP_CGContextWindowRef 字段应该有一个 NSWindow*,而不是 Carbon 窗口引用。

关于cocoa - Safari 5.1 npapi 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7093747/

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