【发布时间】:2011-07-24 02:10:13
【问题描述】:
我一直在编写一个基于 Mac NPAPI 的浏览器插件,用于将自定义 mimetype 的文件(例如“application/x-foo”)转换为 HTML 表示,然后可以直接在浏览器中查看。这些文件通常是直接提供的,所以我更关心支持整页查看,而不是通过<object> 标签嵌入查看。
在 Firefox 上,这相对简单:我使用 text/html mimetype 调用 NPN_NewStream,将转换后的 HTML 写入流,然后使用 NPN_DestroySteam 清理它。浏览器自动处理对新 HTML 流的请求,并将给定的 HTML 呈现到选项卡或窗口中。很标准。
不过,对于 Safari,NPN_NewStream 似乎没有实现(我确实检查了 WebKit 源代码)。以前,我可以使用 WebKitPlugin API。在 Safari 5.1 中,这个 API 消失了。
我认为我可以在绘图事件处理程序中创建一个 WebView,如下所示:
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];
并在浏览器中查看。但所做的只是渲染一个没有内容的灰色屏幕,就好像没有绘制一样。如果我用NSTextView 替换WebView 并将其字符串设置为HTML,一切都很好,但当然HTML 不是由NSTextView 呈现的。
我的问题归结为:有没有一种好方法可以将一些 HTML 从 NPAPI 插件呈现到 Safari 窗口中?或者如果这不起作用,进入谷歌浏览器窗口?或者其他一些方法可以让我处理自定义 MIME 类型并显示它的一些 HTML 表示?
【问题讨论】: