混合iOS应用程序 - 接收onChange事件的问题

时间:2014-02-26 14:47:00

标签: javascript html ios uiwebview hybrid-mobile-app

我正在开发一个使用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;

}

0 个答案:

没有答案