Gắn thính giả là khá dễ dàng (chỉ có ở phiên bản cũ của CEF):
procedure MouseDownCallback(const Event: ICefDomEvent);
begin
ShowMessage('Mouse down on '+Event.Target.Name);
end;
procedure AttachMouseDownListenerProc(const Doc: ICefDomDocument);
begin
Doc.Body.AddEventListenerProc('mousedown', True, MouseDownCallback);
end;
procedure TMainForm.Button1Click(Sender: TObject);
begin
ChromiumComponent.Browser.MainFrame.VisitDomProc(AttachMouseDownListenerProc);
end;
Về chức năng mở rộng để có được kết quả JavaScript trực tiếp: (? Chưa) thân cây không chứa chúng. Có vẻ là công việc đang tiến hành.
Sửa:
Bắt thoát khỏi bỏ phiếu thông qua mở rộng:
Nó thực sự là có thể cho mã JavaScript của bạn gọi lại vào mã Delphi của bạn sử dụng phần mở rộng. Hơn nữa, bạn có thể gửi các giá trị từ JavaScript đến Delphi - điều này có thể được sử dụng để chuyển các kết quả mà không cần phải thăm dò ý kiến.
đầu tiên trong phần initialization
bạn đăng ký phần mở rộng, mà tạo ra một đối tượng JavaScript sau để được sử dụng khi gọi lại:
procedure RegisterExtension;
var
Code:string;
begin
Code :=
'var cef;'+
'if (!cef)'+
' cef = {};'+
'if (!cef.test)'+
' cef.test = {};'+
'(function() {'+
' cef.test.__defineGetter__(''test_param'', function() {'+
' native function GetTestParam();'+
' return GetTestParam();'+
' });'+
' cef.test.__defineSetter__(''test_param'', function(b) {'+
' native function SetTestParam();'+
' if(b) SetTestParam(b);'+
' });'+
' cef.test.test_object = function() {'+
' native function GetTestObject();'+
' return GetTestObject();'+
' };'+
'})();';
CefRegisterExtension('example/v8', Code, TMyHandler.Create as ICefv8Handler);
end;
initialization
RegisterExtension;
TMyHandler
's Execute
sẽ được gọi sau. TMyHandler
được định nghĩa là
TMyHandler = class(TCefv8HandlerOwn)
protected
function Execute(const name: ustring; const obj: ICefv8Value;
const arguments: TCefv8ValueArray; var retval: ICefv8Value;
var exception: ustring): Boolean; override;
end;
Việc thực hiện cho các mục đích trình diễn rất đơn giản cho bây giờ:
function TMyHandler.Execute(const name: ustring; const obj: ICefv8Value; const arguments: TCefv8ValueArray; var retval: ICefv8Value; var exception: ustring): Boolean;
begin
ShowMessage('Execute!');
end;
Bây giờ để kiểm tra gọi vào Delphi từ JavaScript đơn giản làm:
ChromiumComponent.Browser.MainFrame.ExecuteJavaScript('cef.test.test_object().GetMessage();', 'about:blank', 0);
này sẽ hiển thị hộp thông báo nói "Thực thi!".
Tôi kéo kịch bản demo từ một mẫu tên cefclient mà bạn có thể tìm thấy trong \ demo \ cefclient thư mục trong thư mục gốc thành phần. Mã mẫu mở rộng được ẩn một chút và trộn lẫn với mã demo khác. Nhưng sự quan tâm đặc biệt đối với chúng tôi là việc thực hiện TExtension.Execute
(tương đương với TMyHandler.Execute
) của tôi. Ở đó bạn có thể tìm cách xác định hàm nào đang được gọi và cách truyền tham số. (Link to the code.)
Wow, Delphi-6 nơi bạn phải thực hiện tất cả Unicode bằng tay và Chromium với hỗ trợ Unicode đầy đủ.Bây giờ mà âm thanh như một trở kháng không phù hợp với tôi :) –
"Impedance không phù hợp". Có một kỹ sư điện tử trong phòng folks. :) Bạn nói đúng, nhưng Delphi 6 vẫn là IDE yêu thích của tôi. Ít nhất là bây giờ. –
Tôi ước mình là kỹ sư điện tử; Tôi chưa bao giờ có cơ hội nghiên cứu nó, nhưng vẫn có cảm giác rằng biết về kỹ thuật điện tử và có cảm giác về những gì có thể đi sai có ích rất lớn trong CNTT. Tôi hiểu bạn thích Delphi 6, nhưng mong bạn xem xét các phiên bản hiện tại hơn. Gần đây tôi phải quay trở lại, và có rất nhiều điều tôi đã bỏ lỡ ... –