2013-07-05 84 views
1

我希望用戶能夠從我的iPhone應用程序掃描條形碼到網絡表單。這樣我一直在用javascript實現類似的東西。保存UIWebView ActiveElement供以後使用

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

但是,當我使用相機掃描儀,它必須加載一個新的視圖和web視圖失去焦點。有沒有辦法爲以後保存活動元素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]]; 

它似乎沒有提交價值。有任何想法嗎?此外,我剛剛在谷歌網站上進行了測試......

回答

1

我想通了。

首先使用javascript函數保存activeElements ID。 (self.activeElement僅僅是一個的NSString)

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

對我來說,我使用的是攝像頭條碼掃描儀...當我回來的視圖(和web視圖已失去焦點)我使用此代碼放入值並可選擇提交表單。

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

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

當您回到上一個視圖時,實際上是一個具有默認值的新實例。

您需要將此值保存在某處並在視圖初始化時加載。

例如,您可以使用程序的當前狀態(或初始默認值)值創建一個單例。然後,當你加載視圖時,你可以從這個狀態獲得信息。這樣,在離開視圖之前,您可以在此單例中設置所需的值,並在需要時加載回來。

另一種解決方案是類似於this

+0

我明白你在說什麼,但你誤解了這個問題。我沒有試圖保存字符串,而是找到JavaScript的文本字段。 – Hackmodford

+0

我打算推薦您找到的相同解決方案。我必須在C++/Qt上做類似的事情。不幸的是,我沒有足夠的積分來回答你的答案。 – wendelbsilva

相關問題