shouldStartLoadWithRequest не называют при использовании AJAX/XMLHttpRequest

Я пытаюсь отправить вызовы метода от JavaScript до Objective C и наоборот. Все хорошо работает для инициированных URL window.location, которые пойманы shouldStartLoadWithRequest. Теперь, если я пытаюсь использовать вызов Ajax вместо этого, shouldStartLoadWithRequest не называют. Существует ли способ сделать это? Главным образом я не хочу быть ограниченным макс. размером URL на данных, которые могут быть переданы от JavaScript до Objective C.

Мои реализации UIWebViewDelegate:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
 NSString *url = [[request URL] absoluteString];
 NSRange urlrange = [url rangeOfString:@"myScheme://"];
 if(urlrange.length > 0){
  NSLog(@"this is an objective-c call, do not load link: %@", [url substringWithRange:NSMakeRange(urlrange.location, [url length])] );
  return NO;
 } else {
  NSLog(@"not an objective-c call, load link: ", url );
  return YES;
 }
}

Мои вызовы JavaScript:

// works
window.location.href = "myScheme://readyHref";  

// fails
var xmlHttpReq = false;
if (window.XMLHttpRequest) {
 xmlHttpReq = new XMLHttpRequest();
} else if (window.ActiveXObject) {
 xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlHttpReq.open('GET', "myScheme://readyAJAX", false);
xmlHttpReq.send();
8
задан el_migu_el 25 April 2010 в 11:03
поделиться

1 ответ

Хотя я не смог найти ответа, почему запросы AJAX не перехватываются shouldStartLoadWithRequest, я нашел два обходных пути. Я предполагаю, что Запросы JavaScript не перехватываются, а перехватываются только связанные с HTML / исходные запросы. Если бы кто-нибудь мог проверить или исправить это, я был бы счастлив.

Два обходных пути просты.С одной стороны, кажется, что ограничение в 256 символов в URL-адресе не влияет на MobileSafari или, по крайней мере, на URL-адрес в этом состоянии. Я читал, что Safari допускает 80 000 символов . Однако я не чувствовал себя хорошо с этим. Таким образом, обходной путь №2 - использовать html-форму, которая использует метод POST, и установить действие для вашей схемы. Данные могут быть сохранены в форме как значение поля ввода и т.п. После отправки формы с помощью JavaScript запускается shouldStartLoadWithRequest, и данные могут быть получены из HTTPBody.

2
ответ дан 5 December 2019 в 12:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: