dinleyici takılması oldukça kolay (CEF sadece eski sürümler) 'dir: JavaScript almak için genişletilmiş fonksiyonlara ilişkin
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;
doğrudan sonuçları: (? Henüz) gövde bunları içermez. Devam eden bir iş gibi görünüyor.
Düzenleme:
uzantıları yoluyla yoklama kurtulmak:
JavaScript kodu uzantılarını kullanarak Delphi koduna geri çağırması da gerçekten mümkün. Ayrıca, JavaScript'ten Delphi'ye değerler gönderebilirsiniz - bu, sonuçları sorgulamadan aktarmak için kullanılabilir.
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
'ın Execute
sonra çağrılır: En initialization
bölümünde
İlk geri çağrılırken sonra kullanılmak üzere bir JavaScript nesnesi oluşturur uzantısı, kayıt.
ChromiumComponent.Browser.MainFrame.ExecuteJavaScript('cef.test.test_object().GetMessage();', 'about:blank', 0);
Bu göstermesi gerekir:
Şimdi
function TMyHandler.Execute(const name: ustring; const obj: ICefv8Value; const arguments: TCefv8ValueArray; var retval: ICefv8Value; var exception: ustring): Boolean;
begin
ShowMessage('Execute!');
end;
basitçe do JavaScript dan Delphi içine çağıran test etmek: TMyHandler
TMyHandler = class(TCefv8HandlerOwn)
protected
function Execute(const name: ustring; const obj: ICefv8Value;
const arguments: TCefv8ValueArray; var retval: ICefv8Value;
var exception: ustring): Boolean; override;
end;
gösteri amaçlı uygulama şimdilik basittir olarak tanımlanır "Execute!" yazan bir mesaj kutusu.
Sana
\ demolar bulabileceğiniz cefclient \ cefclient bileşeni kök dir klasör adında bir örnekten demo senaryoyu çekti. Uzantı örnek kodu biraz gizli ve diğer demo koduyla karıştırılmış. Ancak bizim için özel ilgi alanımız
TExtension.Execute
(benim
TMyHandler.Execute
'a eşdeğer) uygulamasıdır. Burada hangi işlevin çağrıldığını ve parametrelerin nasıl iletileceğini nasıl bulabilirsiniz. (
Link to the code.)
Wow, tüm Unicode el ile Unicode ve tam Unicode desteği ile Chromium yapmak zorunda Delphi-6.Şimdi bu benim için bir empedans uyuşmazlığı gibi geliyor :) –
"Empedans uyumsuzluğu". Oda arkadaşında elektronik mühendisi var. :) Haklısın, ama Delphi 6 hala en sevdiğim IDE. En azından şimdilik. –
Keşke elektronik mühendisi olsaydım; Hiç çalışma şansım olmadı, ama hala elektronik mühendisliği hakkında bilgi sahibi olmanın ve neyin yanlış gidebileceği konusunda bir fikir sahibi olmanın BT'de çok yararlı olduğu hissine kapıldım. Delphi 6 gibi anlıyorum ama daha güncel versiyonlara bakmaya çalışıyorum. Son zamanlarda geri dönmek zorunda kaldım ve o kadar çok özledim ki ... –