保存UIWebView ActiveElement以供以后使用

时间:2013-07-05 20:16:44

标签: javascript iphone uiwebview

我希望用户能够从我的iphone应用程序中将条形码扫描到webform中。我用这种方式用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();"];

将textfield 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]];

似乎没有提交值。有任何想法吗?我也刚刚在googles网站上测试过这个....

2 个答案:

答案 0 :(得分:1)

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

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

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

另一种解决方案是this

答案 1 :(得分: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]];