黑色输入背景 - Cocoa WebView

时间:2012-05-14 17:05:29

标签: html css macos cocoa

早上好,

我一直在开发和维护一个包含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"/>

enter image description here

我玩过“背景颜色”风格,还玩了一些我发现的here没有太多运气的webkit样式。奇怪的是,这个页面通常通过Safari显示,但不是通过Cocoa WebView。有没有人对要尝试的事情有任何建议?

4 个答案:

答案 0 :(得分:4)

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

最后一个版本看起来与发布的版本最接近,但并不完全正确(WebCoreTextFieldCell缺少WebCore二进制文件)。由于10.7.4来源还没有完成,所以我们假设这已经足够了。

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

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

既然已经理解了这个问题,那么我们就可以了解事情的建议&#34;部分。以下是一些想法:

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

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

答案 1 :(得分:3)

也许稍微安全一点,我发现在输入元素样式中添加-webkit-appearance: none;也可以。

答案 2 :(得分:2)

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

答案 3 :(得分:0)

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