2

我目前在 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;

不幸的是,当我尝试将字段设置为只读时,身份验证服务器的行为就像未填写密码字段一样,并在单击“提交”按钮后提示用户再次填写。这是预期的行为吗?如果是,我可以尝试哪些其他方法来阻止用户更改浏览器自动填充的凭据?

4

2 回答 2

2

尝试制作它们readonly

webBrowser1.Document.GetElementById("username").SetAttribute("readonly", "readonly");        
webBrowser1.Document.GetElementById("password").SetAttribute("readonly", "readonly");
于 2012-06-12T16:40:42.283 回答
2

为什么不创建一个如本文所示的透明面板,该面板将放置在 webbrowser-control 的顶部:

/// <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.
        }
    }

这将阻止用户修改这些值。

您可以根据需要显示/隐藏此面板,甚至可以根据需要扩展以捕获鼠标单击位置。

于 2012-06-12T16:41:05.713 回答