1

我希望用户能够从我的 iphone 应用程序中将条形码扫描到网络表单中。通过这种方式,我一直在用 javascript 实现类似的东西。

NSString *javaScript = [NSString stringWithFormat:@"var textField = document.activeElement;"
                            "textField.value = '%@';" , barcode];
    [webView stringByEvaluatingJavaScriptFromString:javaScript];

但是,当我使用相机扫描仪时,它必须加载一个新视图并且 webview 失去焦点。有没有办法保存活动元素 ID 以供以后使用,以便当您返回时,我可以再次赋予该视图焦点并可能自动提交?

编辑:

我大部分时间都在工作,这就是我所做的。

self.activeElement = [webView stringByEvaluatingJavaScriptFromString:@"function getTextField(){ var textField = document.activeElement.id; return textField; } getTextField();"];

这会将文本字段 id 保存到字符串变量中。然后当我的应用程序从相机视图中出来时。

NSString *javaScript = [NSString stringWithFormat:@"var textField = document.getElementById('%@'); textField.value = '%@';" , self.activeElement, barcodeValueFromCamera];

[webView stringByEvaluatingJavaScriptFromString:javaScript];

这就像预期的那样投入了价值......但是,如果我尝试这个。

[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementByID(%@).form.submit();", self.activeElement]];

它似乎没有提交价值。有任何想法吗?另外我刚刚在谷歌网站上测试过这个......

4

2 回答 2

1

当您返回上一个视图时,这实际上是一个具有默认值的新实例。

您需要将此值保存在某处并在视图初始化时加载。

例如,您可以使用程序的当前状态(或初始默认值)的值创建一个单例。然后,当您加载视图时,您可以从该状态获取信息。这样,在离开视图之前,您可以在此单例中设置所需的值,并在需要时加载回来。

另一种解决方案是这样的。

于 2013-07-05T21:09:02.457 回答
1

我想到了。

首先使用 javascript 函数保存 activeElements ID。(self.activeElement 只是一个 NSString)

self.activeElement = [webView stringByEvaluatingJavaScriptFromString:@"function getTextField(){ return document.activeElement.id; } getTextField();"];

在我的情况下,我使用的是相机条形码扫描仪......当我回到视图(并且 webview 失去焦点)时,我使用此代码输入值并可选择提交表单。

[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById('%@').value = '%@';" , self.activeElement, inputString]];

[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById('%@').form.submit();", self.activeElement]];
于 2013-07-07T02:32:33.227 回答