2

大家早上好,

我一直在开发和维护一个包含 WebView 部分的 Cocoa 应用程序。它是针对 10.5 SDK 构建的,以保持 PPC 兼容性。随着最新的 Safari 更新(随 10.7.4 更新而来),所有 HTML 输入字段现在都有黑色背景。例如,此 HTML 显示如下...

Username: <input type="text" name="username" id="something" placeholder="something"/></br> 
Password: <input type="password" name="password" id="somethingelse" placeholder="somethingelse"/>

在此处输入图像描述

我玩过“背景颜色”风格,也玩过我在这里找到的几个 webkit 风格,但运气不佳。奇怪的是,这个页面通过 Safari 正常显示,而不是通过 Cocoa WebView。有人对尝试的事情有任何建议吗?

4

4 回答 4

4

我们的应用程序遇到了同样的事情,所以我做了一些挖掘。看起来 WebKit 已更新为使用 NSTextFieldCell 来绘制字段背景,而不是旧的私有 API:

最新版本看起来最接近发布的版本,但并非完全如此(WebCore 二进制文件中缺少 WebCoreTextFieldCell)。由于 10.7.4 源尚未启动,我们假设这已经足够接近了。

重要的一点是 NSTextFieldCell 被设置为使用 [NSColor clearColor] 绘制其背景。当然,想要的效果是让它呈现透明而不掩盖它下面的内容。这假设合成模式设置为 NSCompositeSourceOver。

不幸的是,在 10.6 之前,NSTextFieldCell 使用 NSCompositeCopy [ 4 ]。通过检查 SDK 版本来实现与早期应用程序的向后兼容性,这意味着链接到早期 SDK 的应用程序实际上最终会复制清晰的颜色而不是合成它。这最终造成了可怕的黑色混乱。

既然理解了这个问题,我们就可以进入“尝试的事情的建议”部分。这里有一些想法:

  • 等待 Apple 意识到他们的错误并发布更新。
  • Swizzle -[NSTextFieldCell drawInteriorWithFrame:inView:] 如果控件视图是 WebHTMLView,则不绘制背景。这听起来很脆弱,可能会对 Mac App Store 产生影响。
  • 针对 10.6 SDK 重新编译。

我肯定会选择最后一个选项。

于 2012-05-15T12:56:49.363 回答
4

也许更安全一些,我发现添加-webkit-appearance: none;到输入元素样式也可以。

于 2012-06-04T04:29:21.613 回答
2

全部。作为临时解决方法,请为您的文本框设置边框样式。这对我有用:border: 1px solid #000000;

于 2012-05-18T22:05:50.610 回答
0

另一种解决方法。向输入元素添加一个 css 样式属性:不透明度:0.99;

于 2012-05-30T18:35:15.977 回答