Новое в iOS 8 - это ошибка, которая блокирует пользовательский интерфейс, когда происходит более чем несколько JavaScript-сообщений.iOS 8 JavaScript для UIWebView ошибка связи
Связь с Javascript осуществляется через UIWebView
's stringByEvaluatingJavaScriptFromString
, а JavaScript для родного - через пользовательскую схему URL.
Если я делаю три или более сообщений, то первые два происходят немедленно, однако последующие принимают 10 секунд на сообщение.
Кто-нибудь испытывает это?
EDIT: 2014/09/23
В частности, проблема возникает, если вы делаете два JavaScript для родных вызовов последовательно,
[self.webView stringByEvaluatingJavaScriptFromString:@"calliOS('aurlscheme://awebview?say=two'); calliOS('aurlscheme://awebview?say=cat');"];
где calliOS() является функцией JavaScript, который использует для the iframe hack, чтобы вызвать собственный код через схему URL.
Если заменить IFrame взломать с прямым вызовом 'window.location',
[self.webView stringByEvaluatingJavaScriptFromString:@"window.location='aurlscheme://awebview?say=two';window.location='aurlscheme://awebview?say=cat';"];
Вы теряете все, кроме последнего запроса схемы URL.
Итак, в заключение, , делая быстрый последовательный JavaScript для родных вызовов, либо использовать IFrame хак и пользовательский интерфейс зависает на несколько секунд, или вы используете window.location
путь и потерять все, кроме последнего запроса.
Я также заинтересован в этом. Можете ли вы настроить собственные схемы URL-адресов на работу?До сих пор я не получал уведомления о них в webView: shouldStartLoadWithRequest: navigationType на iOS 8. – Alexander
Да, это работает для меня, хотя я использую 'application: application handleOpenURL: url', чтобы поймать запрос, проанализировать строку запроса GET и передать словарь параметров в соответствующий контроллер представления. – paulvs
@AlexanderCollins, см. Мой ответ ниже, он работает для меня в iOS 8. – paulvs