我在我的Delphi firemonkey应用程序中使用TWebBrowser,并且想禁用右键单击页面。 有什么办法吗?
答案 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。