我刚刚开始使用 CEF4Delphi。我在页面控件的选项卡上有一个铬窗口。网页上的元素附加了 javascript 挂钩,这些挂钩注册点击并触发原生 delphi 代码。这一切都在一个网页上正常工作。我可以切换标签并继续点击网页并接收点击事件。
但是,当加载不同的网页时,会出现一些奇怪的行为。第一次加载选项卡时,点击会被很好地注册。切换选项卡时会出现问题。第二次加载选项卡时,未注册任何点击。
第二个网页是由 blazor 创建的,这与第一个不同,但我不确定为什么会影响它。
我已经使用 Google.com 进行了测试,它在那里也可以正常工作。
Chromium1.LoadURL('localhost:6064');
在加载选项卡时运行。
class procedure TmyExtension.ButtonClick(const data: string);
var
msg: ICefProcessMessage;
begin
msg := TCefProcessMessageRef.New('ButtonClick');
TCefv8ContextRef.Current.Browser.MainFrame.SendProcessMessage(PID_BROWSER, msg);
end;
delphi 代码被触发
Chromium1.browser.MainFrame.ExecuteJavaScript(
'document.getElementById("'+
'NewButton' +
'").addEventListener("click", function(evt){' +
'function getpath(n){var ret = n.id;' +
'if (n.parentNode){return "" + ret}' +
'else return ret};'
'myextension.ButtonClick(getpath(evt.target))' +
'})', Chromium1.browser.MainFrame.GetURL, 0);
正在执行的 Javascript
procedure TtabWebPage.Chromium1ProcessMessageReceived(Sender: TObject;
const browser: ICefBrowser; const frame: ICefFrame;
sourceProcess: TCefProcessId; const message: ICefProcessMessage;
out Result: Boolean);
begin
if (message = nil) or (message.ArgumentList = nil) then exit;
// This function receives the messages with the JavaScript results
if (message.Name = 'ButtonClick') then begin
Inc(FCount);
Result := True;
end;
inherited;
end;
接收铬消息并增加计数。
似乎没有办法调试 javascript 是否正在运行。每次页面加载时肯定会运行 ExecuteJavaScript 函数。我想知道是否与导致此问题的网页的 blazor 方面有关,或者是否有任何方法可以调试该问题。