Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa Firefox可可插件_Cocoa_Npapi - Fatal编程技术网

Cocoa Firefox可可插件

Cocoa Firefox可可插件,cocoa,npapi,Cocoa,Npapi,我已经创建了一个简单的hello world插件,它可以画出红色的方框 在嵌入xulrunner应用程序后,插件几乎可以正常工作。Xulrunner应用程序在调整应用程序窗口大小时成功地重新绘制了框 但是在任何鼠标事件之后,例如,左键单击,我的应用程序就会因堆栈溢出而崩溃。调试器说原因是forwardMethod的两次调用和JSD_GetValueForObject的一次调用的无休止循环 崩溃堆栈内容之后是下一个: -[应用程序索引窗口:] -[N事件窗口] JSD_GetValueForObj

我已经创建了一个简单的hello world插件,它可以画出红色的方框

在嵌入xulrunner应用程序后,插件几乎可以正常工作。Xulrunner应用程序在调整应用程序窗口大小时成功地重新绘制了框

但是在任何鼠标事件之后,例如,左键单击,我的应用程序就会因堆栈溢出而崩溃。调试器说原因是forwardMethod的两次调用和JSD_GetValueForObject的一次调用的无休止循环

崩溃堆栈内容之后是下一个:

-[应用程序索引窗口:] -[N事件窗口] JSD_GetValueForObject JSD_GetValueForObject JSD_GetValueForObject 正向方法 正向方法 JSD_GetValueForObject 正向方法 正向方法 JSD_GetValueForObject 正向方法 正向方法 JSD_GetValueForObject 正向方法 正向方法 JSD_GetValueForObject 正向方法 正向方法 JSD_GetValueForObject 正向方法 正向方法 等 我的代码是:

int16_t NPP_HandleEvent(NPP instance, void* event)
{
    EventRecord* carbonEvent = (EventRecord*)event;

    if (carbonEvent && (carbonEvent->what == updateEvt))
    {       
        PluginInstance* currentInstance = (PluginInstance*)(instance->pdata);
        CGContextRef cgContext = ((NP_CGContext*)(currentInstance->window.window))->context;
        float windowWidth = currentInstance->window.width;
        float windowHeight = currentInstance->window.height;

        static int x = 0;

        if (x++)
            return;

        NPRect clipRect = currentInstance->window.clipRect;

        NP_CGContext* npContext = currentInstance->window.window;

        NSWindow* browserWindow = [[[NSWindow alloc] initWithWindowRef:npContext->window] autorelease];

        int y = [browserWindow frame].size.height - (clipRect.bottom - clipRect.top) -  currentInstance->window.y;

        //[plugin attachToWindow:browserWindow at:NSMakePoint(window->x, y)];
        NSPoint point = NSMakePoint(currentInstance->window.x, y);

        // find the NSView at the point
        NSView* hitView = [[browserWindow contentView] hitTest:NSMakePoint(point.x+1, point.y+1)];
        if (hitView == nil || ![[hitView className] isEqualToString:@"ChildView"]) 
        {
            x = 0;
            return;
        }

        NSView* parentView = hitView;       

        NSBox *box = [[NSBox alloc] initWithFrame:NSMakeRect(0.0, 0.0, 100, 100)];
        [box setBoxType:NSBoxCustom];
        [box setBorderType:NSLineBorder];
        [box setTitlePosition:NSNoTitle];
        [box setFillColor:[NSColor redColor]];

        [parentView addSubview:box];

        //DrawPlugin(cgContext, windowWidth, windowHeight);
    }

    return 0;
}

我认为Cocoa和旧的EventRecord系统不能很好地结合在一起

cocoa事件模型现在可以在mozilla的最后一个版本中使用

使用查看comm central的目录树并尝试: hg克隆src Xcode项目的路径是: src/modules/plugin/sdk/samples/basic/mac/ 并且插件必须复制到: /图书馆/互联网插件/

我自己用基本的firefox插件和cocoa事件系统进行了尝试。 我只是不知道如何获取指向当前NSView的指针

我认为必须在mac上为64位版本的Firefox做这件事。它在Firefox 3.6中不可用,但可能在Firefox 3.7中,并且带有Cocoa事件模型的NPAPI SDK的版本为0.23

编辑: 要在不使用mercurial的情况下直接试用,请下载最新的mozilla build as Misha,网址为: 具有Cocoa事件模型的Xcode项目位于:


Webkit源代码中的NetscapeCocoaPlugin示例也使用cocoa事件模型。

我不认为cocoa和旧的EventRecord系统混合得很好

cocoa事件模型现在可以在mozilla的最后一个版本中使用

使用查看comm central的目录树并尝试: hg克隆src Xcode项目的路径是: src/modules/plugin/sdk/samples/basic/mac/ 并且插件必须复制到: /图书馆/互联网插件/

我自己用基本的firefox插件和cocoa事件系统进行了尝试。 我只是不知道如何获取指向当前NSView的指针

我认为必须在mac上为64位版本的Firefox做这件事。它在Firefox 3.6中不可用,但可能在Firefox 3.7中,并且带有Cocoa事件模型的NPAPI SDK的版本为0.23

编辑: 要在不使用mercurial的情况下直接试用,请下载最新的mozilla build as Misha,网址为: 具有Cocoa事件模型的Xcode项目位于:


Webkit源代码中的NetscapeCocoaPlugin示例也使用cocoa事件模型。

非常感谢Winz

我刚从下载了最新的mozilla版本和SDK

和BasicPlugin.xcodeproj


可可活动模型现在可以访问。

非常感谢Winz

我刚从下载了最新的mozilla版本和SDK

和BasicPlugin.xcodeproj

Cocoa事件模型现在可以访问

我只是不知道如何获取指向当前NSView的指针

你好,温兹

答案似乎显而易见-我们可以使用EventRecord遗留事件模型获得NSView,然后通过添加以下行切换到Cocoa事件模型:

browser->setvalueinstance,NPPVpluginEventModel,void*NPEventModel

我的应用程序在那之后变得绝对稳定。没有更多的崩溃

在激活应用程序的主窗口后,我刚刚收到一个NPCocoaEventDrawRect。因此,cocoa事件模型似乎是可行的

我只是不知道如何获取指向当前NSView的指针

你好,温兹

答案似乎显而易见-我们可以使用EventRecord遗留事件模型获得NSView,然后通过添加以下行切换到Cocoa事件模型:

browser->setvalueinstance,NPPVpluginEventModel,void*NPEventModel

我的应用程序在那之后变得绝对稳定。没有更多的崩溃


在激活应用程序的主窗口后,我刚刚收到一个NPCocoaEventDrawRect。因此cocoa事件模型似乎可以工作。

实际上,32位以下不支持cocoa事件模型。这就是为什么所有32位cocoa插件都必须使用Carbon事件模型,而不能使用CoreAnimation这样需要cocoa事件模型的伟大东西的原因。米沙:你是说在Netscape插件中?它在32位的应用程序中得到了很好的支持。它不是使用EventRef的carbon事件模型。EventRecord是经典Mac OS的遗留模型。米沙:你是说在Netscape插件中?当然,在Netscape插件中。这只是Netscape Cocoa 32位插件的问题。谢谢你,Winz!可以吗

你能确切地告诉我你用的是哪个版本的Mozilla吗?如果您提供一个像Xcode这样的hello world示例项目供下载,或者简单地通过电子邮件发送给我,那就太好了mihuil@ngs.ru . 我感觉我的Xcode设置有问题,实际上32位下不支持Cocoa事件模型。这就是为什么所有32位cocoa插件都必须使用Carbon事件模型,而不能使用CoreAnimation这样需要cocoa事件模型的伟大东西的原因。米沙:你是说在Netscape插件中?它在32位的应用程序中得到了很好的支持。它不是使用EventRef的carbon事件模型。EventRecord是经典Mac OS的遗留模型。米沙:你是说在Netscape插件中?当然,在Netscape插件中。这只是Netscape Cocoa 32位插件的问题。谢谢你,Winz!你能确切地告诉我你用的是哪个版本的Mozilla吗?如果您提供一个像Xcode这样的hello world示例项目供下载,或者简单地通过电子邮件发送给我,那就太好了mihuil@ngs.ru . 我有一种感觉,我在Xcode设置或其他方面出了问题。EventRecord不是碳事件记录,它是碳事件前的记录。也就是说,它是工具箱的事件管理器中的类型。虽然该事件管理器仍然存在于32位的Carbon中,但真正的“Carbon事件管理器”是一个单独的API,具有自己的不透明EventRef类型。感谢Peter的评论。在切换到真正的碳事件模型后,问题可能会得到解决…如果可能的话…我在调试器中尝试了下一个代码:NPError NPP_New。。。{NPBool supportsCoreGraphics;如果浏览器->getvalueinstance,NPNVsupportsCoreGraphicsBool,&supportsCoreGraphics!=NPERR\u NO\u ERROR supportsCoreGraphics=FALSE;NPBool supportsCarbon;如果浏览器->getvalueinstance,NPNVSupportScarbool,&supportsCarbon!=NPERR\u NO\u ERROR supportsCarbon=FALSE;返回0}调试结束后,调试器停止返回supportsCarbon=false!!!我尝试了最新稳定版本的xulrunner,甚至是最新的Beta版,结果总是一样的,所以插件甚至不能支持真正的碳事件模型。奇怪,非常奇怪。。。。也许我做错了什么?事件记录不是碳事件记录,而是碳事件前的记录。也就是说,它是工具箱的事件管理器中的类型。虽然该事件管理器仍然存在于32位的Carbon中,但真正的“Carbon事件管理器”是一个单独的API,具有自己的不透明EventRef类型。感谢Peter的评论。在切换到真正的碳事件模型后,问题可能会得到解决…如果可能的话…我在调试器中尝试了下一个代码:NPError NPP_New。。。{NPBool supportsCoreGraphics;如果浏览器->getvalueinstance,NPNVsupportsCoreGraphicsBool,&supportsCoreGraphics!=NPERR\u NO\u ERROR supportsCoreGraphics=FALSE;NPBool supportsCarbon;如果浏览器->getvalueinstance,NPNVSupportScarbool,&supportsCarbon!=NPERR\u NO\u ERROR supportsCarbon=FALSE;返回0}调试结束后,调试器停止返回supportsCarbon=false!!!我尝试了最新稳定版本的xulrunner,甚至是最新的Beta版,结果总是一样的,所以插件甚至不能支持真正的碳事件模型。奇怪,非常奇怪。。。。也许我做错了什么?是的,我用的是最新版本,不是最新的测试版。在给您发送电子邮件之前,我试图获取NSView上的指针,但尚未成功。此外,在firefox的源代码中还有一个叫做nsview的类!请毫不犹豫地编辑或发布答案,告诉我们您是如何嵌入应用程序的^ ^是的,我使用的是最新版本,而不是最新的测试版。在给您发送电子邮件之前,我试图获取NSView上的指针,但尚未成功。此外,在firefox的源代码中还有一个叫做nsview的类!请毫不犹豫地编辑或发布答案,告诉我们您是如何嵌入应用程序的^ ^ ^我将对此进行测试,谢谢。我尝试使用最新Webkit来源的NetscapeCocoaPlugin示例:在NPP_SetWindow中调用[NSView focusView]也会返回当前的NSView。您绝对不应该这样做。不允许在NPP_外更改模型。事实上,它正在为您工作是一个意外的实施。您无法在Cocoa事件模型下获得指向本机NSView的指针,这是出于设计。一旦你的插件用完了,你想出的任何解决办法都会失败。我会测试一下,谢谢。我尝试使用最新Webkit来源的NetscapeCocoaPlugin示例:在NPP_SetWindow中调用[NSView focusView]也会返回当前的NSView。您绝对不应该这样做。不允许在NPP_外更改模型。事实上,它正在为您工作是一个意外的实施。在Cocoa事件模型下无法获取指向本机NSView的指针,并且 这是精心设计的。一旦你的插件用完了,你想出来的任何解决方法都会失败。