【问题标题】:Black input backgrounds - Cocoa WebView黑色输入背景 - Cocoa WebView
【发布时间】:2012-05-14 17:05:29
【问题描述】:

大家早上好,

我一直在开发和维护一个包含 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 样式here,但运气不佳。奇怪的是,这个页面通过 Safari 正常显示,而不是通过 Cocoa WebView。有人对尝试的事情有什么建议吗?

【问题讨论】:

  • 您是使用 CSS 类来生成类,还是使用内联样式?
  • 在这个简单的例子中,我没有使用任何 CSS 或内联样式。 index.html 页面正是粘贴的内容。当我在玩样式时,我尝试了内联和 CSS。
  • 在链接到较新的 SDK 时,您仍然可以保持 ppc 兼容性。部署目标是这方面的重要设置

标签: html css macos cocoa


【解决方案1】:

我们的应用程序遇到了同样的事情,所以我做了一些挖掘。看起来 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 重新编译。

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

【讨论】:

  • 比坐在那里等待修复更好的是提交雷达,最好在此处报告数字以便于复制
  • 11454320,如果有人想欺骗它。
  • 在我问之前打开了一个 - 11445540
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 简单且风险很小。谢谢!
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2014-01-30
      • 2011-05-21
      • 1970-01-01
      • 2023-04-06
      • 2020-04-23
      • 2013-04-16
      • 2013-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多