2012-06-12 50 views
1

我目前在C#WinForms应用程序中使用WebBrowser控件,并尝试控制此控件提供的一些可变性。在C#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; 

不幸的是,当我尝试将字段设置为只读时,认证服务器的行为就像未填写密码字段,并在点击“提交”按钮后提示用户重新填写。这是否是预期的行为,如果是这样,我可以尝试使用其他方法来防止用户更改浏览器自动填充的凭据?

回答

2

尝试使他们readonly

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

谢谢,这工作!看起来像禁用密码表格灰色,防止文本选择,并防止发布,而将其设置为“只读”允许选择文本,但禁用编辑,同时仍然正确发布。 – sichinumi

1

你为什么不建立在this article所示的透明面板,这将被放置在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. 
     } 
    } 

这防止用户修改这些值。

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