2013-11-27 16 views
5

Tôi đang cố gắng tạo ChromiumOSR theo lập trình nhưng tôi vẫn gặp lỗi (vi phạm quyền truy cập). Đây là mẫu mã mà gây ra vấn đề:Gặp lỗi khi tạo ChromiumOSR theo chương trình

var 
pChromiumOSR: TChromiumOSR; 
begin 
    pChromiumOSR := TChromiumOSR.Create(Self); 
    pChromiumOSR.OnLoadEnd := pChromiumOSRLoadEnd; 
    pChromiumOSR.Browser.MainFrame.LoadUrl('www.google.com'); 
end; 

Vấn đề là pChromiumOSR.Browser.MainFrame luôn là con số không. Nếu tôi làm pChromiumOSR.load ('www.google.com'); Tôi không nhận được bất kỳ lỗi nào nhưng nó không kích hoạt tính năng onLoadend.

Có ai có thể cho tôi bất kỳ đề xuất nào về những gì tôi có thể làm sai không? Tôi đang sử dụng Delphi XE2 nhưng không chắc chắn phiên bản của crom (nơi tôi có thể tìm thấy phiên bản?)

Cảm ơn sự giúp đỡ của bạn.

Trả lời

5

Nỗ lực của bạn để sử dụng phương pháp Load để tải trang là chính xác. Người kia đã sai và không thành công vì phiên bản Browser không được tạo. Đó là bởi vì TChromiumOSR được thiết kế để trở thành một thành phần thiết kế thời gian hơn là được tạo động.

Bây giờ, nơi duy nhất mà cá thể Browser được tạo là phương thức Loaded, được gọi cho thành phần sau khi biểu mẫu gốc được tải từ luồng. Và vì bạn đang tạo nó một cách năng động, cá thể Browser không bao giờ được tạo.

Vì lý do nào đó, phương pháp CreateBrowser (tạo ra trường hợp Browser) được gọi là riêng tư, làm phức tạp gọi một chút (trừ khi bạn quyết định sửa đổi nguồn và công khai nguồn). Nếu bạn không muốn thay đổi mã nguồn DCEF của bạn, bạn có thể sử dụng một helper class để cung cấp truy cập vào các CreateBrowser phương pháp:

uses 
    ceflib, cefvcl; 

type 
    TChromiumOSRHelper = class helper for TCustomChromiumOSR 
    public 
    procedure CreateBrowserInstance; 
    end; 

implementation 

{ TChromiumOSRHelper } 

procedure TChromiumOSRHelper.CreateBrowserInstance; 
begin 
    Self.CreateBrowser; 
end; 

Sau đó, để tạo ra một trường hợp Browser thêm CreateBrowserInstance gọi trước khi là người đầu tiên truy cập vào Browser ví dụ (ở đây là phương pháp Load):

var 
    pChromiumOSR: TChromiumOSR; 
begin 
    pChromiumOSR := TChromiumOSR.Create(Self); 
    pChromiumOSR.OnLoadEnd := pChromiumOSRLoadEnd; 
    pChromiumOSR.CreateBrowserInstance; 
    pChromiumOSR.Load('www.google.com'); 
end; 
+0

Cảm ơn TLama, tôi đã sử dụng ví dụ của bạn và nó hoạt động hoàn hảo. Cảm ơn câu trả lời nhanh chóng và tuyệt vời. – user3032933

+0

Bạn được chào đón! – TLama

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