delphi - 有什么方法可以在 Delphi Firemonkey 中禁用 TWebBrowser 的右键单击
问题描述
我在我的 Delphi firemonkey 应用程序中使用 TWebBrowser,并希望禁用页面上的右键单击。有没有办法解决这个问题。
解决方案
自 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,但希望它有助于您开始实施。
推荐阅读
- typescript - 如何在 onCreate 中创建自定义声明?
- sql - SQL Server 中基于列值的条件聚合
- node.js - roles.forEach 不是函数
- c++ - 为什么使用引用作为迭代器
- java - 为什么添加弹簧安全后无法访问主页
- python - 用列表的嵌套字典解析字典
- spring - Spring Controller - 测试以使用邮递员在内部接收带有 multipartfile 的嵌套 dto
- excel - 选择 | 使用合并单元格复制自动筛选范围 -> 粘贴到 NewSheet 的 A1
- git - 一个git仓库可以触发多个代码管道正常吗?
- java - 从云应用程序中排除 Oracle 数据库错误