首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebBrowser注入Javascript以将焦点设置为第一个输入框

WebBrowser注入Javascript以将焦点设置为第一个输入框
EN

Stack Overflow用户
提问于 2015-12-24 22:18:04
回答 1查看 760关注 0票数 1

我想注入一个javascript,以便将焦点设置为第一个输入框。

我目前的代码是:

代码语言:javascript
复制
Me.WebBrowser1.Focus()

Dim i&
Dim JS(100) As String

'The following Javascript-injection ensures, that the first
'found input-element (if there is one) will be focused
' i = i + 1 : JS(i) = "<script>"
i = i + 1 : JS(i) = "var inputElements = document.getElementsByTagName('input');"
i = i + 1 : JS(i) = "for(i=0; i<inputElements.length; i++)"
i = i + 1 : JS(i) = "{"
i = i + 1 : JS(i) = "  if (inputElements[i].type != 'hidden')"
i = i + 1 : JS(i) = "  {"
i = i + 1 : JS(i) = "    if (inputElements[i].disabled == false)"
i = i + 1 : JS(i) = "    {"
'  If uSetFocusToFirstBox Then
i = i + 1 : JS(i) = "      inputElements[i].focus();"
' End If
'If uScrollIntoView Then
i = i + 1 : JS(i) = "      inputElements[i].scrollIntoView(true);"
'End If
i = i + 1 : JS(i) = "      break;"
i = i + 1 : JS(i) = "    }"
i = i + 1 : JS(i) = "  }"
i = i + 1 : JS(i) = "}"

Dim head As HtmlElement = Me.WebBrowser1.Document.GetElementsByTagName("head")(0)
Dim scriptEl As HtmlElement = Me.WebBrowser1.Document.CreateElement("script")
Dim element As IHTMLScriptElement = DirectCast(scriptEl.DomElement, IHTMLScriptElement)
element.text = Join(JS, "")
head.AppendChild(scriptEl)
Me.WebBrowser1.Document.InvokeScript("sayHello")

有人看到我的错误了吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-25 11:16:16

集中于第一个文本输入

选项1-没有脚本

您不需要向文档中注入脚本。您可以在那里处理DocumentCompleted事件,使用GetElementByTagName查找输入元素,并使用启用的type="text"查找第一个输入,然后调用Focus(),它还会自动滚动焦点输入到视图中:

代码语言:javascript
复制
Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) _
    Handles WebBrowser1.DocumentCompleted

    Dim firstTextBox = Me.WebBrowser1.Document.GetElementsByTagName("input") _
                         .Cast(Of HtmlElement)() _
                         .Where(Function(element)
                                    Return element.GetAttribute("type") = "text" And _
                                           element.Enabled = True
                                End Function) _
                         .FirstOrDefault()

    If (firstTextBox IsNot Nothing) Then
        firstTextBox.Focus()
    End If 
End Sub

选项2-注入脚本

出于这个原因,您不需要使用脚本,但是为了防止需要注入脚本,下面是一个示例。您应该将对Microsoft.mshtml的引用添加到项目中,并编写如下代码:

代码语言:javascript
复制
Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) _
    Handles WebBrowser1.DocumentCompleted

    Dim scriptText = "var inputElements = document.getElementsByTagName('input');" & _
                     "for(i=0; i<inputElements.length; i++){" & _
                     "  if (inputElements[i].type == 'text' && !inputElements[i].disabled){" & _
                     "      inputElements[i].focus();" & _
                     "      inputElements[i].scrollIntoView(true);" & _
                     "      break;" & _
                     "  }" & _
                     "}"

    Dim head As HtmlElement = Me.WebBrowser1.Document.GetElementsByTagName("head")(0)
    Dim script As HtmlElement = Me.WebBrowser1.Document.CreateElement("script")
    Dim scriptElement As IHTMLScriptElement = DirectCast(script.DomElement, IHTMLScriptElement)
    scriptElement.text = scriptText
    head.AppendChild(script)
End Sub
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34458343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档