问题标签 [cef4delphi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - 德尔福的铬。如何访问 DOM
我正在使用CEF4Delphi项目。
我的目标是加载页面并询问 DOM
我定义了一个事件处理程序Chromium1.OnDocumentAvailable
,我可以在其中做
虽然, OnDocumentAvailable永远不会被调用,即使我使用Chromium1.LoadURL(URL)
.
Chromium 组件加载 URL 后如何访问 DOM?
delphi - CEF / Chromium 渲染进程 CPU 使用率
我使用 CEF4Delphi 将 CEF / Chromium 嵌入到我的 Delphi XE 10.1 应用程序中。我目前在 CEF 版本 3.2987.1597.gffc5773(Chromium 版本 57.0.2987.110),32 位。
当客户不浏览时,我可以在 Windows 任务管理器中看到渲染过程通常保持 0% 的 CPU 使用率,但有时渲染过程似乎卡住并占用了它可以获得的所有 CPU(单个 CPU 的 100%, 16%,因为我有 6 个可用),即使用户什么都不做并且浏览器窗口不可见。当卡住时,它似乎一直卡住,直到我结束该过程,已经观察到几个小时。我已打开详细日志记录,但只要用户不执行任何操作,就不会记录任何内容。在启动时和用户积极浏览时,我确实得到了很多日志记录。
有关如何解决此问题的任何提示?我只在我的终端服务器上看到这个问题,并且我自己无法在开发机器或 TS 上重现该行为。上次我看到这种行为是在应用程序启动后大约两个小时。
任何帮助表示赞赏。
谢谢,苏尔
delphi - Delphi Web 浏览器组件作为 DLL
我对 Delphi 比较陌生,在实习岗位上。几周前,我被要求创建一个概念证明,以使用从 DLL 调用的非常基本的 Web 浏览器,然后浏览器将导航到特定的网站。我的概念证明需要根据主应用程序的要求实现一个 DLL。我被要求研究的组件是 TWebBrowser、DCEF3和CEF4Delphi。
在过去的几周里,我注意到每个组件存在不同的问题,我将简要讨论这些问题并尝试给出一个概述。
TWebBrowser:我知道 TWebBrowser 本质上是 Internet Explorer,特别是驻留在机器上的 IE 版本。而且我了解在注册表中设置文档模式,因为它默认为 IE7 模式,除非设置。我注意到,即使将文档模式设置为最高,该组件也会出现一些 JavaScript 和渲染问题。网站的特定部分需要与之交互,显示可选择的图像。当我在任何 IE11 中访问此站点时,它交互正常,但通过 TWebBrowser 组件显示图像但无法选择。我找不到遇到同样问题的人,所以我离开了 TWebBrowser。
DCEF3:这是非常有希望的。我能够制作一个与网站完美交互的独立浏览器。在我尝试将其移入 DLL 之前,没有任何问题。一切顺利,直到网络浏览器表单被释放;应用程序挂起并变得无响应。我可以让它不挂起的唯一方法是删除 FreeLibrary() 方法。问题是我有一个孤立的进程,在呼叫应用程序最终关闭后仍在运行。Windows 10 可以很好且积极地处理这个问题,但我使用的是 Windows 7 64 位操作系统(为 32 位编程)。我在网上看到其他有完全相同问题的人直接询问了组件开发人员,他的最终回答是它永远不会工作,然后就这样了。
CEF4Delphi:这是最有前途的!我能够将其放入 DLL 并从另一个应用程序打开浏览器。一切正常。我对此的唯一问题是它需要更改程序文件(.dpr),这在如此小的 POC 中很好,但在最终将与之一起使用的主程序中是不可接受的(程序文件在问题已经有近 2000 行)。
以下是 CEF4Delphi From 所需的更改:
至:
调用应用程序是在 Delphi 2006 中完成的,我尝试使用 Delphi 2006 和 Delphi 10.2 作为 DLL。因此,除了 CEF4Delphi 之外,我至少有两个版本的每个 DLL 都没有成功,因为上级永远不会同意对 .dpr 文件的更改。
我昨天偶然发现了一个非常相似的问题。我对 David Heffernan 的回答很感兴趣,特别是他关于修改组件的初始化和完成部分的结论。
所以我有两个关于 DCEF3 的问题:
是否可以编辑组件代码的这些部分以强制使其适合作为 DLL 工作?
如果是这样,我会怎么做?我明白显而易见的事情是“让它看起来”类似于大卫赫弗南在回答另一个问题时建议的代码,但就像我说的,我对 Delphi 比较陌生,所以真的不知道这个特别代码将在这种情况下进行。
或者,如果其他人对其他两个组件有任何建议,我会全力以赴。提前致谢。
delphi - CEF4Delphi 和 DUnit
我正在通过 DUnit 在我的应用程序中测试我使用CEF4Delphi创建的一些进程。
以下是重现该问题的 MCVE:
以下是测试用例:
如果我使用 .Show,指令FChromiumCreated := True;
不执行,TChromium 不加载页面,测试返回 false。我不确定,但这可能是因为 TChromium 是异步初始化的,并且在执行测试时 TChromium 尚未完全初始化。
在这种情况下如何执行我的测试?
编辑 我已阅读此答案。就我而言,.Show 确实允许进入下一行测试,但似乎 TChromium 在那个阶段还没有完全初始化。我也尝试了tomazy的建议,但这也不起作用。
firemonkey - 使用 CEF4Delphi 从 firemonkey 显示网页
我正在使用 Delphi 10.2 Tokyo 并安装了 CEF4Delphi,因为我认为普通的 TWebBrowser 组件在性能和功能方面似乎有点下降。
我正在做的项目是显示网页,不需要显示任何 URL 地址。所以我只需要显示网页。
我发现了一些 VCL 应用程序演示,包括 CEF4Delphi,它们使用另一个 TChromiumWindow 或类似的东西来显示网页。而且演示中只有一个(AFAIK)FMX 应用程序示例,带有离屏渲染以显示在 TFMXBufferPanel 中。
我尝试了从 Demos 创建表单、加载 URL 和 AddObject 到主布局的确切方法,但只显示来自演示项目的橙色屏幕,或显示访问冲突错误。我可能不知道如何正确阅读 API 文档,我找不到它。
我从谷歌搜索所有与 CEF4Delphi 和 FMX 相关的东西,但这些东西已经过时了,从 DCEF3 或 FMX 之前的 Delphi 时代开始。如果没有解决方案,我将放弃并使用 VCL。
我的结论,
我可以使用 CEF4Delphi 从 Firemonkey 加载网页吗?只需要加载网页。
如果上述问题是可能的,我是否也可以拍摄屏幕快照并打印网页以获取其副本或保存为 pdf?我认为这些都可以用一两行源代码来完成。
我会发布我尝试过的工作。为一些注释代码道歉,我的老板尝试过。
这是程序执行代码。
delphi - CEF4Delphi 单元测试不
我正在测试一个带有CEF4Delphi组件的 TFrame,但是在释放包含 TFrame 和相关 CEF4Delphi 组件的 TForm 时遇到了问题。
以下是一个最小示例
当我运行 TestTSSFrm.TestChromium1AfterCreated; 测试通过,但是在关闭测试应用程序时,应用程序本身并没有完全关闭,我必须手动从 IDE 重置它。如果我注释掉这些行
那么我关闭测试应用程序没有问题,但我必须手动关闭表单。
我在哪里做错了?
delphi - 如何使用 Chromium Embedded (CEF) 加载本地 html 文件?
我想将一个 html 文件加载到Chromium(CEF4Delphi)中,但没有显示任何内容,只有一个白页。
是否可以使用以下方法加载本地 html 文件?
这是html文件。
还有其他问题,即每次执行 Chromium 时,也会执行我的应用程序的其他实例。如何解决这个问题?
使用的代码:
表格2:
版:
相对于我对正在执行的应用程序的多个实例的怀疑,这是正常且正确的,基于本文 。
delphi - Chromium Embedded:TCefDomVisitorOwn.visit() 方法永远不会被执行
我正在使用CEF4Delphi并尝试获取input
页面的确定 html 元素,然后使用下面的代码将值设置为相同,但碰巧该方法TElementNameVisitor.visit(const document: ICefDomDocument);
从未被执行。
我怎么能解决这个问题?
c++ - 设置一个成员 GlobalCEFApp->OnWebKitInitialized 和函数地址 C++ Builder
我想用 CEF4 构建一个测试应用程序。我已经成功地将 CEF4Delphi (github.com/salvadordf/CEF4Delphi) 组件安装到 C++ Builder。我想在 C++ Builder 中构建 JSExtension delphi 演示项目。
我正在尝试为成员设置一个函数,但每次都会出现相同的错误:
[bcc32 错误] Unit1.cpp(35): E2235 成员函数必须被调用或者它的地址被占用
我尝试了所有这些:
如何正确地做到这一点?
我在 C++ Builder 中使用 CEF4Delphi (github.com/salvadordf/CEF4Delphi) 组件。在 delphi JSExtension 演示项目上,它运行良好,但我无法构建同一演示的 C++ 版本。C++使用delphi接口,不知道怎么正确使用。我需要将我的函数分配给 GlobalCEFApp->OnWebKitInitialized = 的成员函数?
delphi - 将 JS 扩展演示 (CEF4Delphi) 从 Delphi 转换为 C++Builder 失败 OnWebKitInitialized
我想构建从https://github.com/salvadordf/CEF4Delphi下载的 CEF4Delphi 附带的 JS 扩展演示项目,该项目已安装在 C++Builder XE7 上。我的目标是将消息和变量从 Chromium(网页、javascript)发送到本机 C++ 函数。
我发现 delphi 演示效果很好。但是我需要翻译成 C++Builder,而且我翻译了几乎所有的代码。如果我不设置 TCefApplication 的 OnWebKitInitialized 成员,它会很好。但是我需要设置才能注册我的扩展,所以当我这样做时,应用程序编译并构建良好,但浏览器有白色背景,没有显示。我需要让这个演示在 C++Builder 中工作。我在下面附上了源代码。
单元1.h
单元1.cpp
uTestExtensionHandler.h
我希望正确注册我的扩展,以便能够将消息和结果变量从网页返回到本机 c++ 函数。我在 delphi 演示中做了几乎相同的事情,但不能让它在 c++builder 中工作。我应该改变什么才能让它工作?
更新:
我尝试了第二种方法:
我认为这GlobalCEFApp->OnContextCreated
不是 Ivoked,就像GlobalCEFApp->OnWebKitInitialized
. 也许对函数的引用没有正确传递?