gpt4 book ai didi

javascript - Web浏览器注入(inject)Javascript将焦点设置到第一个输入框

转载 作者:行者123 更新时间:2023-11-27 23:32:17 26 4
gpt4 key购买 nike

我想注入(inject)一个 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")

有人看到我的错误吗?

谢谢!

最佳答案

将焦点设置在第一个文本输入上

选项 1 - 不使用脚本

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

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 - 注入(inject)脚本

由于这个原因,您不需要使用脚本,但如果您需要注入(inject)脚本,这里有一个示例。您应该将对 Microsoft.mshtml 的引用添加到项目中并编写这样的代码:

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

关于javascript - Web浏览器注入(inject)Javascript将焦点设置到第一个输入框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34458343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com