Delphi 运行时页面源代码更新-Chromium
在chromium上,您可以使用GetSourceProc获取页面源代码,就像我在internet上找到的delphi代码一样:Delphi 运行时页面源代码更新-Chromium,delphi,chromium,delphi-2010,tchromium,Delphi,Chromium,Delphi 2010,Tchromium,在chromium上,您可以使用GetSourceProc获取页面源代码,就像我在internet上找到的delphi代码一样: procedure TForm1.Chromium1LoadEnd(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; httpStatusCode: Integer); begin Chromium1.Browser.MainFrame.GetSourceProc(Stri
procedure TForm1.Chromium1LoadEnd(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame;
httpStatusCode: Integer);
begin
Chromium1.Browser.MainFrame.GetSourceProc(StringVisitor);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
chromium1.load('http://www.google.com');
end;
procedure TForm1.StringVisitor(const str: ustring);
begin
mySource := str;
end;
代码运行良好,我可以从mySource变量完美地获取源代码,但是当我更改页面上的数据,然后重新调用代码以获取源代码时,我会获取旧数据,例如,我有一个HTML输入:
<input name="edtFName" type="text" value="ZORRO" id="FName" title="First Name">
所以HTML输入有文本“ZORRO”,当我将文本更改为“ZARA”并在delphi上获取源代码时,我仍然在输入中获取文本“ZORRO”
我的问题是:有没有一种方法可以在delphi上更新当前的源代码或从chromium获取真实的源代码
另外,我在真正的chrome浏览器上打开了HTML页面,并更改了输入中的文本,之后我将页面保存为新文件,然后打开新文件并检查其中的源代码,发现旧文本而不是真正的新文本,这真的是正确的行为吗,如果我有一个很大的html表单,里面填充了很多数据,想要保存页面,那么所有的东西都会丢失,对我来说这看起来像个bug,因为它不会保存当前页面 如果Chrome/Chrome在获取源代码时提供原始输入值,那么您使用的CEF包装器无法阻止它 我认为保存HTML和新值的最简单方法是分别保存 您已经知道如何保存HTML,只需要一个函数获取所有新表单值,另一个函数在加载HTML文件时设置这些表单值 读取新表单值的函数将执行JavaScript代码,该代码搜索表单元素以获得如下值:
var mynewvalue = document.getElementById('MyInputId').value;
document.getElementById('MyInputId').value = mysavedvalue;
然后调用JavaScript扩展中的函数将mynewvalue发送到Delphi
您需要先注册一个自定义JavaScript扩展,然后才能使用流程消息获取将其发送到Delphi的值。所有必要的代码都已经在一个名为CEF4Delphi的demo中,JS扩展在uTestExtension.pas中。该扩展具有为此目的所需的sendresulttobrowser函数
加载HTML文件时设置保存值的函数只需几行JavaScript即可搜索表单元素并设置如下值:
var mynewvalue = document.getElementById('MyInputId').value;
document.getElementById('MyInputId').value = mysavedvalue;
使用TChromium.ExecuteJavaScript执行所有JavaScript代码,您可以在TChromium.OnLoadEnd事件中使用它