Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 运行时页面源代码更新-Chromium_Delphi_Chromium_Delphi 2010_Tchromium - Fatal编程技术网

Delphi 运行时页面源代码更新-Chromium

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

在chromium上,您可以使用GetSourceProc获取页面源代码,就像我在internet上找到的delphi代码一样:

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事件中使用它