2012-04-11 12 views
5

Trên máy tính xách tay OS X 10.7.3 (Lion) của tôi, tôi không thể phân tích cú pháp chuỗi ngày tháng bằng Qt WebKit bằng cách sử dụng hàm tạo ngày. Sử dụng một trong hai hoa nhài-không đầu-webkit hoặc phantomJS, tất cả các cuộc gọi thích:Ngày mới ("YYYY-MM-DD") ngừng hoạt động trong Qt WebKit sau khi xóa MacPorts

new Date("2012-04-10") 

luôn luôn trả

"Invalid Date" 

thay vì một đối tượng Date hợp lệ. Một vài tuần trước, mọi thứ đều hoạt động tốt, và tôi đã kiểm tra điều này trên nửa tá máy tính với một thiết lập tương tự và không thể tái tạo vấn đề ở bất cứ nơi nào khác.

Tôi khá chắc chắn các vấn đề bắt đầu khi tôi quyết định xóa cài đặt MacPorts cũ không được sử dụng của tôi (Tôi đã từ lâu chuyển sang Homebrew và đang làm một số công việc dọn dẹp nhà cửa). Tôi nghi ngờ có một thư viện liên kết động đã được gỡ bỏ khỏi hệ thống của tôi, được sử dụng bởi Qt để phân tích ngày.

Có ai có ý tưởng gì về thư viện phân tích cú pháp ngày này có thể được gọi không? Bất kỳ ý tưởng nếu tôi có thể cài đặt nó với Homebrew hoặc bằng cách nào đó bằng tay sửa chữa sự thiếu phụ thuộc?

Tôi đã thử cài đặt lại Qt và nhiều thư viện khác, nhưng không có lỗi nào đã khắc phục được sự cố.

+0

cập nhật: Tôi đoán điều này không bao giờ làm việc trong phantomJS, sự cố được bản địa hóa thành trang web hoa nhài-headless. Tôi bắt đầu nghi ngờ rằng hoa nhài có thể không chạy trong QtWebkit cho đồng nghiệp của tôi, có lẽ nó đang sử dụng Node.js hoặc cái gì khác. Tôi sẽ tiếp tục điều tra. Câu hỏi này có thể không hợp lệ, nhưng tôi sẽ để nó mở cho đến khi tôi biết thêm. –

Trả lời

2

Tôi không có máy Mac nhưng có tình huống tương tự với Windows, tôi sẽ sử dụng chương trình có thể báo cáo thông tin về các phụ thuộc của ứng dụng như Dependency Walker. Tìm kiếm nhanh được đề xuất this program có thể trợ giúp trong thế giới Mac.

+0

Cảm ơn vì điều đó! Tôi có thể thấy nhiều thông tin thú vị bằng cách mở /Library/Frameworks/QtWebKit.framework/Versions/Current/QtWebKit. Nhưng có rất nhiều phụ thuộc và tôi vẫn chưa tìm ra nguyên nhân gốc rễ, vì vậy tôi không thể đánh dấu câu trả lời được chấp nhận này (đã cho bạn upvote). –

1

Ok, tôi đã giải quyết vấn đề với phân tích cú pháp ngày với trang web hoa nhài-headless. Thật không may, tôi đã không đủ khoa học về nó, vì vậy tôi không chắc chắn những gì cố định nó. Đó là khả năng một số hoặc tất cả các quy trình sau:

  1. Loại bỏ tất cả dấu vết của Qt từ/Library/Frameworks/Qt * và homebrew (/ usr/local/Qt * và/usr/local/Cellar/qt *)
  2. cài đặt lại các thư viện Qt từ http://qt.nokia.com/downloads/ (các thư viện, không phải là SDK ở đầu trang)
  3. cập nhật homebrew qua "cập nhật brew"
  4. brew cài đặt qt

Bên cạnh đó tôi đã cài đặt Qt SDK và XCode 4.3, nhưng tôi không nghĩ là cố định nó bởi vì đồng nghiệp của tôi không có những thứ này được cài đặt và không có cùng một vấn đề như tôi.

Có khả năng điều này không liên quan gì đến MacPort nhưng có thể có liên quan đến cài đặt Qt 4.7 cũ hơn của tôi. Tôi hiện đang chạy Qt 4.8.

Xin lỗi vì tất cả tiếng ồn! Có thể thông tin này sẽ giúp người khác.

0

Dường như lỗi này là do được cố định trong v1.8, theo phát hành 187 "PhantomJS dường như phá vỡ trên định dạng ngày ISO8601":

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

Trong khi đó, một cách giải quyết từ báo cáo lỗi đó là để thêm "T00: 00: 00Z" vào ngày của bạn.

0

Tôi gặp lỗi này, tôi giả định có liên quan đến QtWebKit nhưng khi sử dụng wicked_pdf.Thật khó để giải thích sự phụ thuộc vào wkhtmltopdf và qtwebkit trên các hệ điều hành (tôi chạy OSX trong dev, đôi khi Ubuntu trong dev, chúng tôi triển khai cho Heroku nhưng có thể triển khai lên các nền tảng khác sớm), vì vậy tôi đã punted và sử dụng workaround. Tôi đã sử dụng moment.js để tạo một đối tượng Date và mọi thứ đã hoạt động. Tôi đã không có thời gian để xem xét dưới mui xe và xem nó hoạt động như thế nào, nhưng tôi đoán là moment.js là thông minh về việc chuyển "YYYY-MM-DD" thành đối tượng ngày bằng cách kiểm tra hỗ trợ trình duyệt.

Đây thực sự là một giải pháp khá tốt cho điều này khi bạn không muốn quan tâm đến hệ điều hành nào mà mã của bạn đang chạy và có thể đủ khả năng bao gồm lib thời gian. Bằng cách này, bạn không phải quan tâm đến việc WebKit nào đang chạy.