2012-05-14 3 views
2

Утро каждый,Черные фоны ввода - Cocoa WebView

Я разрабатываю и поддерживаю приложение Cocoa, которое содержит раздел WebView. Он построен против 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

Вы все же можете поддерживать совместимость с ppc при соединении с новым SDK. Цель установки - важная настройка в этом отношении. –

ответ

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 осуществит свою ошибку и отправит обновление.
  • Swizzle - [NSTextFieldCell drawInteriorWithFrame: inView:], чтобы не рисовать фон, если вид управления является WebHTMLView. Это звучит хрупко и может иметь последствия для Mac App Store.
  • Перекомпилируйте 10.6 SDK.

Я бы выбрал последний вариант.

+1

Даже лучше, чем сидеть, надеясь на исправление, будет файл с радаром, в идеале сообщающий номер здесь для простого обмана –

+0

11454320, если кто-то захочет обмануть его. –

+0

Если бы один открыл, прежде чем я спросил - 11445540 – Staros

0

Другое обходное решение. Добавьте свойство стиля CSS в элемент ввода: Непрозрачность: 0.99;

3

Возможно, немного безопаснее, я обнаружил, что добавление -webkit-appearance: none; к стилю элемента ввода тоже работает.

+0

Работает как шарм :) – yoshi

Смежные вопросы