返回到Cocoa应用程序的Javascript十六进制转义字符串没有转义字符

返回到Cocoa应用程序的Javascript十六进制转义字符串没有转义字符,javascript,iphone,objective-c,cocoa,uiwebview,Javascript,Iphone,Objective C,Cocoa,Uiwebview,我正在开发的iPhone应用程序的一部分是使用UIWebView获取页面上某些元素的onclick事件。出现的一个问题是在某些页面上,如iPhone版本的,该页面已通过以下链接: javascript:window.open('/news/url?sa\x3dt\x26ct3\x3dMAA4CEgAUABgAWoCdXN6AWjYAQE\x26usg\x3dAFQjCNGUV1AFw0LsmkcQzNnvo69ma_dhhA\x26rt\x3dHOMEPAGE\x26url\x3dhttp://

我正在开发的iPhone应用程序的一部分是使用UIWebView获取页面上某些元素的onclick事件。出现的一个问题是在某些页面上,如iPhone版本的,该页面已通过以下链接:

javascript:window.open('/news/url?sa\x3dt\x26ct3\x3dMAA4CEgAUABgAWoCdXN6AWjYAQE\x26usg\x3dAFQjCNGUV1AFw0LsmkcQzNnvo69ma_dhhA\x26rt\x3dHOMEPAGE\x26url\x3dhttp://www.cnn.com/2010/US/11/30/wikileaks/?hpt%3DSbin');void(0);  
当我使用以下方法从UIWebView接收函数时:

[webView stringByEvaluatingJavaScriptFromString:
                     [NSString stringWithFormat:@"SomeFunction(%i,%i);",(NSInteger)pt.x,(NSInteger)pt.y]]  
我收到一个字符串,其中转义字符作为实际字符。因此,我从上述方法返回javascript调用,并使用十六进制转义,而不是:

javascript:window.open('/news/url?sa=t&ct3=MAA4CEgAUABgAWoCdXN6AWjYAQE&usg=AFQjCNGUV1AFw0LsmkcQzNnvo69ma_dhhA&rt=HOMEPAGE&url=http://www.cnn.com/2010/US/11/30/wikileaks/?hpt%3DSbin');void(0);  
我在Javascript中尝试了各种转义字符串的方法,如百分比转义和URIEncoding/URIDecoding,但它似乎不起作用,只是不断发送转义字符串而不是实际字符


任何帮助都将不胜感激

如果将“\x”转义替换为“\u00”转义,则可以使用:


我不确定哪些(如果有的话)iOS版本支持“anyhex/Java”。此外,上面的方法无法正确处理某些字符串;任何在“x”之前有偶数个反斜杠的子字符串都将被错误解码。

等等,示例字符串(“javascript:window.open…”)从何而来?这就是
SomeFunction
应该返回的吗?javascript:window.open是DOM树中某个元素的
onclick
属性的一部分。它是由
SomeFunction
返回的,但它当前返回的是作为单个字符的转义字符,而不是它们应该表示的字符。Any-Hex/Java在iOS 4.0上为我工作。我不确定它在早期版本上是如何工作的。非常感谢!如果4.0支持它,我预计它将在3上工作,甚至可能在2上工作,因为同时向OSX添加了对ICU转换和“任意十六进制/Java”的支持。这并不是说我会花钱。
NSMutableString* js = [ [webView stringByEvaluatingJavaScriptFromString:
                                   [NSString stringWithFormat:
                                               @"SomeFunction(%i,%i);",
                                               (NSInteger)pt.x,(NSInteger)pt.y]
                         ] mutableCopy];
[js replaceOccurrencesOfString:@"\\x" 
                    withString:@"\\u00" 
                       options:NSCaseInsensitiveSearch 
                         range:NSMakeRange(0, [js length])];
CFStringTransform((CFMutableStringRef)js,
                  NULL, 
                  (CFStringRef)@"Any-Hex/Java", 
                  true);