2010-09-17 27 views
13

Tôi bắt đầu làm việc trên một tiện ích mở rộng của trình duyệt và vì bản chất của tiện ích mở rộng mà tôi cần phát triển trong C++. Tôi hiện đang làm việc với Firefox nhưng muốn mã của tôi được di động trên các trình duyệt. Trước hết là có một thư viện hoặc một giao diện (như NPAPI) mà tôi có thể sử dụng để đảm bảo điều này cho các phần mở rộng? Những điều tôi cần phải lo lắng là gì?Phát triển tiện ích mở rộng của trình duyệt chéo trong C++

Tôi không sử dụng XPCOM và thay vào đó viết chức năng trong C++ để tôi có thể biên dịch thư viện cho mỗi nền tảng và có thể gói nó với phần mở rộng cho mỗi trình duyệt. Đối với Firefox, tôi đang sử dụng XUL để phát triển trình bao bọc JS cho phần mở rộng của mình và một tệp IDL tạo ra giao diện C++ cho tôi. Tôi có thể làm điều gì đó tốt hơn không? Tôi chỉ muốn chắc chắn rằng tôi không đi sai đường.

CHỈNH SỬA: Vui lòng đề xuất nếu có diễn đàn tốt hơn cho loại câu hỏi này.

+1

Diễn đàn phù hợp. Câu hỏi hay. – sje397

+0

Nhưng không có phản hồi cho đến nay! – user220201

Trả lời

4

Nền của tôi: một vài năm trước, tôi đã làm việc trên một plugin NPAPI đa nền tảng, cross-browser đã sử dụng OpenGL để thực hiện hiển thị hình ảnh. Tôi đã chú ý đến không gian kể từ đó, nhưng nó không phải là những gì tôi làm ngày nay. Tôi đã viết các phần mở rộng không phải plugin cho Firefox nhưng không phải là Safari hoặc Chrome.


Rất nhiều phụ thuộc vào chính xác những gì bạn muốn tiện ích của mình thực hiện và loại giao diện người dùng nào bạn muốn hiển thị. Các trình duyệt khác nhau có ý tưởng khác nhau về những tiện ích có thể và không thể thực hiện được.

Nếu bạn chỉ muốn hiển thị hình ảnh hoặc video theo định dạng tùy chỉnh, NPAPI có lẽ là lựa chọn tốt nhất của bạn. NPAPI về cơ bản là một trình bao bọc mỏng xung quanh các API nền tảng gốc. Như vậy, mã NPAPI đa nền tảng phải xử lý các quirks nền tảng cá nhân, cũng như các mức hỗ trợ khác nhau cho NPAPI từ trình duyệt. Google có một dự án có tên là Pepper để khắc phục một số vấn đề của NPAPI, nhưng Pepper chưa có hỗ trợ từ bất kỳ trình duyệt nào ngoài Chrome.

Dự án Native Client của Google cung cấp giải pháp thay thế cho NPAPI để chạy mã gốc, nhưng nó áp đặt các hạn chế đối với mã gốc. Ví dụ, pthreads được cho phép, nhưng truy cập mạng thì không. Có một tiểu dự án NaCL có tên là c_salt xuất hiện để giải quyết loại HTML/JS UI + tích hợp mã gốc mà bạn tìm kiếm. Thật không may nó vẫn còn trong giai đoạn thiết kế, và do đó không phải là terribly hữu ích cho việc viết phần mở rộng ngày hôm nay.

Hiểu biết của tôi là, hiện tại, tiện ích mở rộng trên nhiều trình duyệt tích hợp với giao diện người dùng trình duyệt và cũng tích hợp với mã gốc không khả thi. Safari và Chrome đều hạn chế các tiện ích mở rộng nhiều hơn Firefox và chỉ cho phép các tiện ích được viết bằng JavaScript. Tôi không biết liệu có thể có tiện ích mở rộng trong Safari hoặc Chrome tương tác với plugin trình duyệt được viết bằng NPAPI hay không. Tôi đoán nó hoặc là không thể hoặc vô cùng đau đớn.

Nhìn chung, bạn sẽ thấy cuộc sống dễ dàng hơn nhiều nếu bạn cẩn thận hạn chế trình duyệt và nền tảng nào cần nhắm mục tiêu. Chính xác trình duyệt và nền tảng nào để chọn là thứ mà chỉ bạn mới có thể quyết định.

+0

Vì vậy, không có một khuôn khổ FireBreath tương đương để viết phần mở rộng Trình duyệt? –

+1

Phát biểu của FireBreath, tôi vừa xem qua một bài đăng tuyệt vời trên trang web của nhà phát triển, [Plugin trình duyệt so với Tiện ích mở rộng: Sự khác biệt] (http://colonelpanic.net/2010/08/browser-plugins-vs-extensions-the-difference /). Phải thừa nhận rằng, tôi đã nhầm lẫn về sự khác biệt giữa hai người. (Đó là một sự xấu hổ, bởi vì những gì tôi thực sự được yêu cầu thực hiện là một phần mở rộng!) –

3

Không nhiều người biết về điều đó, nhưng có, bạn có thể viết plugin trình duyệt chéo bằng cách sử dụng Qt. :-)

Bạn chỉ có thể sử dụng QtBrowserPlugin.

Giải pháp QtBrowserPlugin làm cho nó dễ dàng để viết plugin trình duyệt có thể được sử dụng trong Mozilla FireFox, Safari, Opera, Google Chrome, QtWebKit và bất kỳ trình duyệt web khác có hỗ trợ "Netscape Plugin API" , NPAPI.

QtBrowserPlugin là một phần của gói Qt Solutions.

Các vấn đề liên quan