在 C# Web 浏览器中使用只读字段
本文关键字:读字段 Web 浏览器 | 更新日期: 2023-09-27 18:36:51
我当前正在 C# WinForms 应用程序中使用 WebBrowser 控件,并尝试控制此控件呈现的某些可变性。
基本上,我的用户登录到我的应用程序提供的单独 UI,然后显示 WebBrowser 控件,导航到预先确定的登录 URL,然后自动填充该页面上的用户名和密码字段。
但是,为了防止此 WebBrowser 控件中的不可预知行为,我希望在自动填充这些用户名和密码文本框后将其设置为只读。从本质上讲,我希望用户看到已为他们填写且无法编辑的浏览器页面。(这样任何身份验证错误都可以由我的应用程序而不是浏览器处理。
我当前用于填充文本字段并使其只读的代码如下:
webBrowser1.Document.GetElementById("username").InnerText = username;
webBrowser1.Document.GetElementById("password").InnerText = password;
webBrowser1.Document.GetElementById("username").Enabled = false;
webBrowser1.Document.GetElementById("password").Enabled = false;
不幸的是,当我尝试将字段设为只读时,身份验证服务器的行为就像没有填写密码字段一样,并在单击"提交"按钮后提示用户再次填写。这是预期行为吗?如果是,我可以尝试哪些其他方法来阻止用户更改浏览器自动填充的凭据?
尝试将它们设为readonly
:
webBrowser1.Document.GetElementById("username").SetAttribute("readonly", "readonly");
webBrowser1.Document.GetElementById("password").SetAttribute("readonly", "readonly");
为什么不创建一个透明面板,如本文所示,该面板将放置在 Web 浏览器控件的顶部:
/// <summary>
/// A transparent control.
/// </summary>
public class TransparentPanel : Panel
{
public TransparentPanel()
{
}
protected override CreateParams CreateParams
{
get
{
CreateParams createParams = base.CreateParams;
createParams.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT
return createParams;
}
}
protected override void OnPaintBackground(PaintEventArgs e)
{
// Do not paint background.
}
}
这将阻止用户修改值。
您可以根据需要显示/隐藏此面板,甚至可以根据需要扩展以捕获鼠标单击位置。