Компонент TEdgeBrowser: вызов машинного кода из скрипта, запущенного на встроенной веб-странице
В настоящее время мы используем TWebBrowser
компонент для встраивания IE в наше настольное приложение. Для вызова кода Delphi из скрипта, запущенного во встроенном браузере, мы реализовали поддержкуwindow.external
объект, как описано здесь: http://www.delphidabbler.com/articles/article-22
Теперь по многим причинам нам нужно перейти на современный браузер. Мы уже обновились до Delphi 10.4, в котором представлены новыеTEdgeBrowser
компонент (MS Edge на основе Chromium). Можно ли использоватьwindow.external
также для TEdgeBrowser
? Если да, то как? Или есть другой способ вызвать собственный код из скрипта во встроенном браузере?
1 ответ
Наконец, все оказалось довольно просто. Спасибо TOndrej за ссылку "Начало работы", которая помогла мне разобраться. Я также понял, что он работает с MS Edge Beta (84.0.522.28), поэтому Canary не требуется, как описано здесь Марко Канту: https://blog.marcocantu.com/blog/2020-may-edge-browser-component.html. Я надеюсь, что скоро он будет работать с официальным MS Edge. Вот несколько фрагментов кода:
Delphi:
procedure TForm1.Button1Click(Sender: TObject);
begin
EdgeBrowser1.Navigate(ExtractFilePath(ParamStr(0)) + 'index.html');
end;
procedure TForm1.EdgeBrowser1WebMessageReceived(Sender: TCustomEdgeBrowser; Args: TWebMessageReceivedEventArgs);
var
Msg: PChar;
begin
Args.ArgsInterface.Get_webMessageAsJson(Msg);
MessageBox(Handle, Msg, PChar(EmptyStr), MB_OK);
end;
HTML:
<!DOCTYPE html>
<html>
<body>
<p onclick="handleClick()">Click me</p>
<script>
function handleClick() {
window.chrome.webview.postMessage({ data: 'Message from Edge Chromium', url: window.document.URL });
}
</script>
</body>
</html>