我正在开发一个使用HTML的iOS应用程序 - 该应用程序的大部分都是原生的。我正在使用所有SO中详细描述的shouldStartLoadWithRequest / custom url scheme机制。它一直很好用。然而,我发现的问题涉及text / textarea字段。在独立的浏览器环境中,在文本元素中键入文本然后点击复选框(或收音机)将触发文本元素和复选框/单选按钮的on change事件。但是,我发现在UIWebView中,我只是在给复选框/单选按钮焦点时获得onchange。
由于UIWebView的开销和缺乏快速的JavaScript解释器,我试图尽可能远离jQuery。
提前感谢您的任何帮助。
这是我的JavaScript:
var allTextFields = document.querySelectorAll("input[type=text]");
for (var i = 0; i < allTextFields.length; i++)
{
allTextFields[i].onchange = function(){
var scheme = document.getElementById('scheme').value;
value = this.value;
url = scheme + ':' + this.id + ':' + value;
window.location = url;
}
}
var allTextAreas = document.querySelectorAll("textarea");
for (var i = 0; i < allTextAreas.length; i++)
{
allTextAreas[i].onchange = function(){
value = this.value;
var scheme = document.getElementById('scheme').value;
url = scheme + ':' + this.id + ':' + value;
window.location = url;
}
}
var allSelects = document.querySelectorAll("select");
for (var i = 0; i < allSelects.length; i++)
{
allSelects[i].onchange = function(){
value = this.value;
var scheme = document.getElementById('scheme').value;
url = scheme + ':' + this.id + ':' + value;
window.location = url;
}
}
var allCheckboxFields = document.querySelectorAll("input[type=checkbox]");
for (var i = 0; i < allCheckboxFields.length; i++)
{
allCheckboxFields[i].onchange = function(){
value = this.value;
var scheme = document.getElementById('scheme').value;
url = scheme + ':' + this.id + ':'+ this.checked;
window.location = url;
}
}
这是Objective-C
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSURL *url = [request URL];
if ([[url scheme] isEqualToString:@"file"])
{
return YES;
}
else
{
NSString *valueString = [url resourceSpecifier];
NSArray *values = [valueString componentsSeparatedByString:@":"];
[self updateDatabase:[url scheme] fieldName:values[0] value:values[1]];
}
return NO;
}