我一直在编写基于Mac NPAPI的浏览器插件,将自定义mimetype文件(比如“application/x-foo”)转换为HTML表示形式,它可以然后直接在浏览器中查看。这些文件通常是直接提供的,所以我更关心支持整页查看,而不是通过<object>
标签嵌入视图。如何从Safari中的NPAPI插件呈现HTML
在Firefox上,这一直是比较简单的:我做出NPN_NewStream
与text/html
MIME类型的电话,写HTML转换成流,然后用NPN_DestroySteam
清理。浏览器自动处理对新HTML流的请求,并将给定的HTML呈现为标签或窗口。相当标准。
对于Safari,NPN_NewStream
似乎没有实现(并且我没有检查WebKit源代码)。以前,我能够使用WebKitPlugin API。在Safari 5.1中,这个API不见了。
我想我能在一个绘图事件处理程序创建一个web视图,就像这样:
NSRect rect = NSMakeRect(0, 0, obj->window.width, obj->window.height);
//...
WebView* webView = [[WebView alloc] initWithFrame:rect frameName:nil groupName:nil];
[[webView mainFrame] loadHTMLString:@"<html><head><title>This is a message from my plug-in!</title></head><body><p><strong>This is a message from my plug-in!</strong></p></body>/html>" baseURL:[NSURL URLWithString:@"http://example.com"]];
[webView drawRect:rect];
,并看到它在浏览器中。但所有这一切都会呈现灰色屏幕,没有内容,就好像没有绘制。如果我将WebView
替换为NSTextView
并将其字符串设置为HTML,则所有内容都可以很好地显示出来,但是当然HTML不是由NSTextView
渲染的。
我的问题归结为:是否有一种很好的方法来从NPAPI插件渲染一些HTML到Safari窗口?或者,如果这不起作用,进入谷歌浏览器窗口?或者让我处理自定义MIME类型并显示其一些HTML表示的其他方法?