在C#WebBrowser中使用只读字段

在C#WebBrowser中使用只读字段,c#,webbrowser-control,C#,Webbrowser Control,我目前正在一个C#WinForms应用程序中使用WebBrowser控件,并试图控制该控件的一些可变性 基本上,我的用户登录到我的应用程序提供的一个单独的UI,然后显示WebBrowser控件,导航到预定的登录URL,然后自动填充该页面上的用户名和密码字段 但是,为了防止此WebBrowser控件中出现不可预知的行为,我希望在自动填充这些用户名和密码文本框后使其成为只读。本质上,我希望用户看到一个已经为他们填写的、不能编辑的浏览器页面。(这样,任何身份验证错误都可以由我的应用程序而不是浏览器来处

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

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

尝试将其设置为只读:

webBrowser1.Document.GetElementById("username").SetAttribute("readonly", "readonly");        
webBrowser1.Document.GetElementById("password").SetAttribute("readonly", "readonly");

尝试将它们设置为只读:

webBrowser1.Document.GetElementById("username").SetAttribute("readonly", "readonly");        
webBrowser1.Document.GetElementById("password").SetAttribute("readonly", "readonly");

为什么不创建一个透明面板,如中所示,该面板将放置在webbrowser控件的顶部:

/// <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.
        }
    }
//
///透明控件。
/// 
公共类透明面板:面板
{
公共透明电话()
{
}
受保护的重写CreateParams CreateParams
{
收到
{
CreateParams CreateParams=base.CreateParams;
createParams.ExStyle |=0x00000020;//WS_EX_TRANSPARENT
返回createParams;
}
}
PaintBackground上受保护的覆盖无效(PaintEventArgs e)
{
//不要画背景。
}
}
这将阻止用户修改值


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

为什么不创建一个透明面板,如中所示,该面板将放置在webbrowser控件的顶部:

/// <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.
        }
    }
//
///透明控件。
/// 
公共类透明面板:面板
{
公共透明电话()
{
}
受保护的重写CreateParams CreateParams
{
收到
{
CreateParams CreateParams=base.CreateParams;
createParams.ExStyle |=0x00000020;//WS_EX_TRANSPARENT
返回createParams;
}
}
PaintBackground上受保护的覆盖无效(PaintEventArgs e)
{
//不要画背景。
}
}
这将阻止用户修改值


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

谢谢,这很有效!看起来禁用密码表单会使其变灰,阻止文本选择,并阻止其发布,而将其设置为“只读”则允许文本选择,但在仍然正确发布的情况下禁用编辑。谢谢,这很有效!看起来,禁用密码表单会使其变灰、阻止文本选择并阻止其发布,而将其设置为“只读”则允许文本选择,但在仍然正确发布的情况下禁用编辑。