首页 > 解决方案 > 有什么方法可以在 Delphi Firemonkey 中禁用 TWebBrowser 的右键单击

问题描述

我在我的 Delphi firemonkey 应用程序中使用 TWebBrowser,并希望禁用页面上的右键单击。有没有办法解决这个问题。

标签: delphifiremonkeytwebbrowser

解决方案


自 10.3 Rio 起,Firemonkey 的默认 TWebBrowser 本机不执行此操作。在不同的浏览器组件之外,最好的选择是使用 Javascript。如果您要控制所提供的内容,那非常容易。请参阅如何禁用右键单击我的网页?

如果您正在处理您无法控制其内容的另一个网站,您可以尝试使用 TWebBrowser.EvaluateJavaScript() 注入 Javascript

procedure TForm1.DisableRC;
var
  strJS: string;
begin
  strJS := 'document.addEventListener("contextmenu", function(e){ e.preventDefault();}, false);';
  webbrowser1.EvaluateJavaScript(strJS);
end;

如果您调用 DisableRC,该代码将起作用;从说,一个按钮点击。但如果 URL 重新加载或内容更改,您将需要再次调用它。

我尝试在 TWebBrowser.OnDidFinishLoad 事件中调用 DisableRC() 以在页面导航完成后执行它,但该事件最终在无限循环中触发了数千次。使用 TThread.Queue 没有任何区别。这可能是因为 Javascript 的评估使事件再次触发。

最终的工作是在表单上放置一个 TTimer,默认情况下禁用,在 OnTimer 中使用以下代码:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  DisableRC;
  Timer1.Enabled := false;
end;

然后在 TWebBrowser.OnDidFinishLoad 事件中启用定时器。

这有点像 hack,但希望它有助于您开始实施。


推荐阅读