【问题标题】:How to render HTML from an NPAPI plugin in Safari如何从 Safari 中的 NPAPI 插件呈现 HTML
【发布时间】: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 表示?

【问题讨论】:

    标签: cocoa macos safari npapi


    【解决方案1】:

    老实说,我很惊讶您的 newstream 方法适用于 Firefox。那是一个我从未听说过的新的。如果您必须自己进行绘图,则只能使用带有 CGContext 的 CoreGraphics 或带有 CALayer 的 CoreAnimation。换句话说,你没有得到一个 NSView,所以你不能直接在里面渲染一个 WebView。

    也就是说,您可以将 webview 放在屏幕外上下文中并将其渲染到您的 CGContext,然后代理事件;对于您要执行的操作,这似乎有点复杂,但我不知道另一种方法。

    FireBreath 中有一个 experimental library 可以执行此操作;滚轮未实现,但其他事件有效,包括鼠标拖动和键盘。使用表单事件时仍然有一些奇怪的事情,所以这是否适合您取决于您​​将显示的内容。

    如果您有兴趣尝试为此使用 FireBreath,您可以在工作时间 (GMT-0600) 拨打FireBreath chat room,我通常在附近,可以与外界讨论。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多