2012-04-11 1 views
5

На моем ноутбуке OS X 10.7.3 (Lion) я не могу анализировать строки даты JavaScript с помощью Qt WebKit с использованием конструктора Date. Используя либо жасмин-обезглавленный-WebKit или phantomJS, все вызовы, такие как:Новая дата («ГГГГ-ММ-ДД») перестала работать в Qt WebKit после удаления MacPorts

new Date("2012-04-10") 

всегда возвращает

"Invalid Date" 

вместо действительного объекта Date. Несколько недель назад все работало нормально, и я проверил это на полдюжины компьютеров с аналогичной настройкой и не могу воспроизвести проблему где-либо еще.

Я уверен, что проблемы начались, когда я решил убрать мою старую предположительно неиспользуемую установку MacPorts (я давно перешел на Homebrew и делал уборку дома). Я подозреваю, что есть динамически связанная библиотека, которая была удалена из моей системы, которая используется Qt для синтаксического анализа даты.

Кто-нибудь знает, что может быть названа в этой библиотеке разбора даты? Любая идея, если я смогу установить его с помощью Homebrew или каким-то образом вручную устранить недостающую зависимость?

Я попытался переустановить Qt и многие другие библиотеки, но ничто не устранило проблему.

+0

обновление: Я думаю, что это никогда не работало в phantomJS, проблема локализована в жасмин-headless-webkit. Я начал подозревать, что жасмин, возможно, не работает в QtWebkit для моих коллег, возможно, он использует Node.js или что-то еще. Я продолжу расследование. Этот вопрос может быть недействительным, но я оставлю его открытым, пока не узнаю больше. –

ответ

2

У меня нет Mac, но, учитывая аналогичную ситуацию для Windows, я бы использовал программу, которая может сообщать информацию о зависимостях приложения, таких как Dependency Walker. Предлагаемый быстрый поиск this program может помочь в мире Mac.

+0

Спасибо за это! Я могу увидеть много интересной информации, открыв /Library/Frameworks/QtWebKit.framework/Versions/Current/QtWebKit. Но есть много зависимостей, и я до сих пор не понял причину первопричины, поэтому я не могу отметить этот принятый ответ (хотя и дал вам хотя бы вверх). –

1

Хорошо, я решил проблему с обработкой даты с жасмином-безголовым-webkit. К сожалению, я не был достаточно научен об этом, поэтому я не совсем уверен, что это зафиксировало. Это, вероятно, некоторые или все из следующего процесса:

  1. Удаление всех следов Qt из/Library/Frameworks/Qt * и самогон (/ USR/местные/Qt * и/USR/местные/Подвал/кварт *)
  2. установите библиотеки Qt из http://qt.nokia.com/downloads/ (библиотеки, а не SDK в верхней части)
  3. Update самогон через «обновление заварной»
  4. заварить установить кварты

Дополнительно я установил Qt SDK и XCode 4.3, но я не думаю, что это исправлено, потому что мои коллеги не установили эти вещи и не имели такой же проблемы, как и я.

Возможно, это не имело ничего общего с MacPorts, но могло иметь какое-то отношение к моей старой установке Qt 4.7. Теперь я запускаю Qt 4.8.

Извините за весь шум! Возможно, эта информация поможет кому-то другому.

0

Похоже, эта ошибка должен быть зафиксирован в v1.8, в соответствии с эмиссионными 187 «PhantomJS кажется, перерыв на ISO8601 Формат даты»:

http://code.google.com/p/phantomjs/issues/detail?id=187

В то же время, обходной путь от этот отчет об ошибке должен добавить «T00: 00: 00Z» к вашей дате.

0

У меня была эта ошибка, я предполагаю, что связан с QtWebKit, но при использовании wicked_pdf.Было сложно рассказать о зависимостях от wkhtmltopdf и qtwebkit в разных операционных системах (я запускаю OSX в dev, иногда Ubuntu в dev, мы развертываем в Heroku, но можем быстро развертываться на других платформах), поэтому я набросал и использовал обходной путь. Я использовал moment.js для нового объекта Date, и все сработало. Я не успел заглянуть под капот и посмотреть, как это работает, но я предполагаю, что moment.js умеет превращать «YYYY-MM-DD» в объект даты, проверяя поддержку браузера.

Это на самом деле довольно хороший обходной путь для этого, когда вы хотите не заботиться о том, в какой ОС работает ваш код, и можете позволить себе включить instant.js lib. Таким образом, вам не нужно заботиться о том, какой WebKit работает.