2

对于我在 Windows 和 MacOSX(包括 Windows 下的 Chrome)中尝试过的所有其他浏览器,使用“iframe shim”可以正常工作。但是,我无法让 iframe 垫片在 Mac 上的 Chrome 中处理我们的插件。

谷歌搜索了问题并进行了一些测试,它似乎取决于对象。我找到了一个使用 StreetView(一个 Flash 对象)的示例,它可以工作,另一个示例使用 Java Applet,但它不起作用。

一些链接:

这是该方法的描述:http ://www.oratransplant.nl/2007/10/26/using-iframe-shim-to-partly-cover-a-java-applet/

这个使用 Java Applet 的示例来自上述文章:http ://www.oratransplant.nl/files/iframe_shim.html

这是使用街景的工作版本:http: //gmaps-samples.googlecode.com/svn/trunk/streetview/iframeshim.html

通过在 Chrome 中检查(和编辑)元素并在两个示例页面之间复制对象,flash 对象似乎只允许 iframe shims(在 Mac 上的 Chrome 中),但 Java Applet 不允许。

在我们的例子中,我们使用的是使用 Firebreath 构建的自定义插件。

可能是我需要在我们的插件中实现额外的功能,模仿 Flash 正在做的任何事情,但这很可能是由 Chrome 的 Mac 版本中的错误引起的。

任何人都可以帮忙吗?我们确实希望能够在我们的插件上显示 HTML 元素,并且 iframe shim 几乎适用于所有浏览器/操作系统组合!

4

2 回答 2

2

缺乏合成是 Mac Chrome 中的一个已知错误,任何使用 Core Animation 或 Invalidating Core Animation 的插件。这将在未来的某个版本中得到解决——理论上,您永远不需要在 Mac 上进行 iframe hack,并且插件应该始终正确合成。如果您有兴趣,您可以使用值为 74656 的 NPN_GetValue 检测插件中是否动态支持核心动画的合成(请参阅 WebKit 源代码中的 WKNVSupportsCompositingCoreAnimationPluginsBool ;这应该很快添加到正式的 NPAPI 规范中,但该值不会更改,因此您现在可以对其进行硬编码,并且当 Chrome 支持它时,它将开始返回 true)。

一般来说,iframe hack 应该可以在最新版本的 Chrome 中工作(你正在测试什么版本?),但是有一些错误在页面重新布局之前不会被注意到,所以你可能想玩强制那。

请注意,您的 Streetview 示例不是 Mac Chrome 上的有效测试,因为它使用 wmode=opaque,这意味着它使用的是 CG 模式,而不是 CA 模式,因此无论 iframe hack 如何,合成都可以完全工作。

于 2011-07-20T16:06:21.023 回答
1

你用的是什么绘图方法?您不需要在 Mac 上的插件上使用 iframe,因为所有绘图都是无窗口的,除非您正在做一些奇怪的事情,我不希望 Chrome 可以做到(即在 coregraphics 或 quickdraw 上下文上创建 opengl 上下文)。如果您正在做类似的事情,那么您可能无能为力。

一个简单的设置是将插件调整为 1x1 以有效地“隐藏”它。

于 2011-07-20T15:01:35.340 回答