delphi chromium 保存密码
时间: 2023-09-06 12:12:52 浏览: 166
Delphi Chromium Embedded 2015更新版
5星 · 资源好评率100%
如果您使用的是 Delphi Chromium Embedded Framework(CEF)作为浏览器引擎,那么您可以通过以下步骤保存密码:
1. 在您的 Delphi 项目中,导入 CEF4Delphi 组件。
2. 在您的项目中添加以下单元:
```delphi
uses
ceflib, cefvcl;
```
3. 在您的 TForm 中添加 TChromium 组件,并在 FormCreate 事件中初始化它:
```delphi
procedure TForm1.FormCreate(Sender: TObject);
begin
Chromium1.CreateBrowser('about:blank');
end;
```
4. 在 TChromium 的 OnBeforeContextMenu 事件中添加保存密码的代码:
```delphi
procedure TForm1.Chromium1BeforeContextMenu(Sender: TObject;
const browser: ICefBrowser; const frame: ICefFrame;
const params: ICefContextMenuParams; const model: ICefMenuModel);
var
menu: ICefMenuModel;
i: Integer;
menuItem: ICefMenuModel;
begin
if params.media_type = CM_MT_PASSWORD_FIELD then
begin
menu := TCefMenuModelRef.New(model);
menuItem := TCefMenuModelRef.New(menu.AddItem(1, '保存密码'));
menuItem.Enabled := True;
menuItem.Checked := False;
menuItem.Visible := True;
menuItem := TCefMenuModelRef.New(menu.AddItem(2, '不保存密码'));
menuItem.Enabled := True;
menuItem.Checked := False;
menuItem.Visible := True;
menuItem := TCefMenuModelRef.New(menu.AddItem(3, '清除保存的密码'));
menuItem.Enabled := True;
menuItem.Checked := False;
menuItem.Visible := True;
for i := 0 to menu.Count - 1 do
model.AddSubMenu(i, TCefMenuModelRef.New(menu.GetItem(i)));
end;
end;
```
在这个例子中,我们添加了一个菜单项 "保存密码",当用户在密码输入框中输入用户名和密码时,可以选择保存密码。当用户单击菜单项时,我们将用户名和密码保存到一个 INI 文件中:
```delphi
procedure TForm1.Chromium1ContextMenuCommand(Sender: TObject;
const browser: ICefBrowser; const frame: ICefFrame;
const params: ICefContextMenuParams; commandId: Integer;
eventFlags: TCefEventFlags; out Result: Boolean);
var
ini: TIniFile;
username, password: string;
begin
if commandId = 1 then
begin
username := InputBox('保存密码', '请输入用户名:', '');
password := InputBox('保存密码', '请输入密码:', '');
if (username <> '') and (password <> '') then
begin
ini := TIniFile.Create('passwords.ini');
try
ini.WriteString('Passwords', params.page_url, username + '|' + password);
finally
ini.Free;
end;
end;
end;
end;
```
当用户再次访问相同的网站时,我们可以从 INI 文件中读取已保存的用户名和密码,并自动填充到密码输入框中:
```delphi
procedure TForm1.Chromium1LoadEnd(Sender: TObject;
const browser: ICefBrowser; const frame: ICefFrame; httpStatusCode: Integer);
var
ini: TIniFile;
password: string;
username, url: string;
begin
url := Chromium1.Browser.MainFrame.Url;
if (url <> '') and (frame.IsMain) then
begin
ini := TIniFile.Create('passwords.ini');
try
password := ini.ReadString('Passwords', url, '');
finally
ini.Free;
end;
if password <> '' then
begin
username := Copy(password, 1, Pos('|', password) - 1);
password := Copy(password, Pos('|', password) + 1, Length(password));
Chromium1.ExecuteJavaScript('document.getElementsByName("username")[0].value = "' + username + '";', url, 0);
Chromium1.ExecuteJavaScript('document.getElementsByName("password")[0].value = "' + password + '";', url, 0);
end;
end;
end;
```
在这个例子中,我们假设用户名和密码分别保存在名为 "username" 和 "password" 的输入框中。
请注意,保存密码的方法可能会因网站的不同而有所不同。上述方法仅适用于保存用户名和密码的情况。如果您需要保存其他类型的密码,请参考 CEF4Delphi 组件的文档。
阅读全文