Javascript Hex Escaped String возвращается в приложение какао без экранированных символов - PullRequest
0 голосов
/ 30 ноября 2010

Часть приложения для iPhone, которое я разрабатываю, использует UIWebView , чтобы получить событие onclick для определенных элементов на странице.Одна проблема, которая возникла, связана с определенными страницами, например, версия iPhone http://news.google.com,, на которой уже есть шестнадцатеричная страница, в которой не было ссылок, как показано ниже:

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);  

Я пробовал все виды методов экранирования String в Javascript, такие как процентное экранирование и URIEncoding / URIDecoding, но он делаетпохоже, не работает, просто продолжает отправлять экранированную строку вместо реальных символов.

Любая помощь будет принята с благодарностью!

1 Ответ

1 голос
/ 01 декабря 2010

Возможно, вы сможете использовать CFStringTransform , если заменить экранирование "\ x" на экранирование "\ u00":

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);

Я не уверен, какие (если таковые имеются) версии iOS поддерживают «Any-Hex / Java» транслитератор . Кроме того, вышеупомянутое не будет обрабатывать некоторые строки должным образом; любая подстрока с четным числом обратной косой черты перед "x" будет ошибочно декодирована.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...