有什么办法可以禁用Delphi Firemonkey中的TWebBrowser右键单击

时间:2018-12-12 14:01:36

标签: delphi firemonkey twebbrowser

我在我的Delphi firemonkey应用程序中使用TWebBrowser,并且想禁用右键单击页面。 有什么办法吗?

2 个答案:

答案 0 :(得分:1)

Firemonkey的默认TWebBrowser从Rio 10.3起并没有本地执行此操作。在其他浏览器组件之外,最好的选择是使用Javascript。如果您要控制所提供的内容,那很容易。参见How do I disable right click on my web page?

如果您要处理的内容不受控制的另一个网站,则可以尝试使用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事件中启用计时器。

这有点像骇客,但希望它可以帮助您开始实施。

答案 1 :(得分:0)

我相信您可以修改this code并捕获消息WM_RBUTTONDOWN。用WM_RBUTTONDOWN替换参考代码中的WM_LBUTTONDOWN。我会尝试的,但是我只安装了C ++ Builder。