【问题标题】:UIWebview set text on current textfieldUIWebview 在当前文本字段上设置文本
【发布时间】:2026-01-17 20:30:01
【问题描述】:

有没有办法在UIWebview 上设置当前文本字段上的文本?

我不需要检索文本。我不需要确定当前具有焦点的文本字段。

基本上,用户将扫描条形码(使用 linea-pro),如果在 uiwebview 中选择了文本字段,我只想将文本设置为检索到的条形码

【问题讨论】:

    标签: ios objective-c iphone uiwebview barcode


    【解决方案1】:

    您可以执行可以为文本字段设置值的 JavaScript 函数。像这样的

    NSString *text = @"Text field text";
    NSString *javaScript = [NSString stringWithFormat:@"var textField = document.activeElement;"
                                                       "textField.value = '%@';"
                                                       "document.activeElement.form.submit();", text];
    [webView stringByEvaluatingJavaScriptFromString:javaScript];
    

    【讨论】:

    • 但这假设您知道文本字段的 ID?我只想说“嘿,不管当前的文本字段……把这个值放进去。” (几乎就像我在间接控制键盘一样)
    • 这行得通(我用过activeElement)[NSString stringWithFormat:@"var textField = document.activeElement;" "textField.value = '%@';", text];
    • 如果您更改答案以反映此字符串,我会将其标记为正确。 NSString *javaScript = [NSString stringWithFormat:@"var textField = document.activeElement;" "textField.value = '%@';" "document.activeElement.form.submit();", text];
    • 唯一不起作用的情况是如果我使用相机扫描条形码,因为 UIWebView 失去焦点。有什么解决办法吗?
    【解决方案2】:
     let javaScriptQuery = "document.activeElement.id"
            webView.evaluateJavaScript(javaScriptQuery) { (result, error) -> Void in
                print("focus element id = \(result as? String)")
                let focusedElementID = (result as? String)!
                let testString = "Testing Testing......"
                let javascript = "var textField = document.getElementById('\(focusedElementID)'); textField.value = '\(testString)';"
                self.webViewObj.evaluateJavaScript(javascript) { (result, error) in
                    if error != nil {
    
                    } else {
                        print(result ?? "not found")
                    }
                }
            }
    

    【讨论】: