我在Delphi firemonkey应用程序中使用TWebBrowser,并想禁用该页面上的右键单击。
有什么办法吗?
最佳答案
从10.3 Rio开始,Firemonkey的默认TWebBrowser本身不执行此操作。在其他浏览器组件之外,最好的选择是使用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事件中启用计时器。
这有点骇人听闻,但希望对您的实施有所帮助。
关于delphi - 有什么方法可以禁用Delphi Firemonkey中的TWebBrowser右键单击,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53744734/