如何在iOS上解析PAC文件

时间:2014-09-03 13:38:33

标签: javascript ios pac

所以我试图在iOS设备上获取代理信息。操作系统可以方便地使用CFNetworkCopySystemProxySettings()函数来获取设置字典。当提供主机和端口时我没有问题,我可以分别使用kCFNetworkProxiesHTTPProxy和kCFNetworkProxiesHTTPPort键在字典中访问它们。但是,有时不提供这些,而是​​为kCFNetworkProxiesProxyAutoConfigURLString键提供URL。现在,这就是我遇到问题的地方......

所以我拉出了包含javascript函数的文件:

function FindProxyForURL(url,host)

{
    if (isInNet(host, "10.xxx.xxx.xxx", "255.255.224.0"))        
    {                                               
    return "DIRECT";                                
    }
        if (isInNet(host, "10.xxx.xxx.xxx", "255.255.224.0"))  
    {                                               
    return "DIRECT";                                
    }
return "PROXY host:port";   
}

这一切对我来说都很好..?

然后,我尝试调用函数并获取返回值,这就是出错的地方:(这是我最近的尝试:

NSString *jsFunction = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; // jsFunction is the javascript function above
JSContext *context=  [[JSContext alloc] init];
[context evaluateScript:jsFunction];
JSValue *function = context[@"FindProxyForURL"];
JSValue *jsResult = [function callWithArguments:@[[JSValue valueWithObject:[NSString stringWithCppString:host] inContext:context], [JSValue valueWithObject:[NSString stringWithCppString:host] inContext:context]]];
NSString *result = [jsResult toString];

结果总是以未定义的形式返回!!

我已经尝试了一些测试函数来代替PAC,只是递增数字并且它们按预期工作,这个问题似乎是在我引入对isInNet的调用时开始的。有没有人有类似的问题? iOS不支持isInNet吗?我做了一件明显不对的事吗?

感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:1)

问题是isInNet(或任何其他可能使用的PAC函数)未定义;它们不是标准的Javascript函数。您是否尝试过更直接的内容,例如CFNetworkCopyProxiesForAutoConfigurationScript