2012-05-14 40 views
2

大家好,黑色输入背景 - 可可WebView

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

我的“背景色”的风格发挥周围,也有一对夫妇的WebKit的风格,我发现here打没有太多的运气。奇怪的是,这个页面通过Safari正常显示,而不是通过Cocoa WebView。有没有人有任何建议要尝试?

+0

您是使用CSS类来生成类还是使用内联样式? – TNCodeMonkey

+0

在这个简单的例子中,我没有使用任何CSS或内联样式。 index.html页面正是粘贴的内容。当我玩风格时,我尝试了线内和CSS。 – Staros

+0

您仍然可以在与新SDK进行链接时保持ppc兼容性。部署目标是这方面的重要设置 –

回答

2

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

+0

简单而且风险很小。谢谢! – Staros

4

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

,最新的版本看起来最接近于运,但并不完全(WebCoreTextFieldCell缺乏WebCore二进制文件)。由于10.7.4源代码还没有出现,我们假设这是足够的。

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

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

既然这个问题已经被理解了,我们就可以得到“尝试的建议”部分。这里有一些想法:

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

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

+1

甚至比坐在希望修复更好的方法是提交一个雷达,理想情况下报告数字以便轻松复制 –

+0

11454320,如果有人想要欺骗它的话。 –

+0

之前我问过一个 - 11445540 – Staros

0

另一个解决方法。添加一个CSS样式属性到输入元素: 不透明度:0。99;

3

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

+0

工程就像一个魅力:) – yoshi