Есть вероятность пойти не так в этом сценарии две вещи: 1) ваш Js бросает исключение и 2) страница перегружает после ваш Js, закончилась, и поэтому сброс эффектов вашего сценария.
В моем опыте, когда Javascript, кажется, не работает в UIWebView
, это почти всегда Javascript, который бросает исключение.
Try окружающего сценария в try { ... } catch { ... }
захватить исключение:
NSString* js =
@"try {"
"var meta = document.createElement('meta'); "
// [rest of the script...]
"document.getElementsByTagName('head')[0].appendChild(meta)";
" } catch (exc) { "
" window.ERR = exc.toString(); "
" } "
Теперь вы можете установить точку останова в Xcode после вызова stringByEvaluatingJavaScriptFromString:
. Сообщение об ошибке может быть доступно, если вы запустите
po [webView stringByEvaluatingJavaScriptFromString:@"window.ERR"]
В вашей подсказке отладки.
Хорошей идея, когда вы попробуете Javascript на вашем UIWebView
является первым сделать разведочную работы в чем-то вроде Chrome Developer Tools отсеять худшие ошибки (например, ошибки синтаксиса). Если ваш код работает там, следующим шагом является подключение к просмотру с помощью Safaris Web inspector for iOS и посмотреть, все ли он делает то, что ему нужно.
@ nilveryboring указывает, что вы добавляете скрипты в webViewDidFinishLoading
, а не в shouldStartLoadWithRequest
. В shouldStartLoadWithRequest
страница еще не загружена, и любое состояние, которое вы вводите в этот момент, будет отброшено на странице загрузки.
JS не работает на новой странице. Как определить, полностью ли загружена новая страница? – nilveryboring
@nilveryboring Это все часть [UIWebView-протокола делегатов] (https://developer.apple.com/library/ios/documentation/uikit/reference/UIWebViewDelegate_Protocol/Reference/Reference.html). Чтобы обнаружить, когда UIWebView закончил загрузку, вы используете 'webViewDidFinishLoading'. Что касается того, почему фрагмент js не работает, я не совсем уверен (я не знаю jscript). Установите некоторые точки останова, чтобы увидеть, вызвана ли она. Кроме этого, проверьте код jscript и преобразование в NSString, чтобы убедиться, что вы делаете это правильно. Отвечает ли это на ваш вопрос? – CaptJak
@nilveryboring, вам нужно открыть еще один вопрос? Вы хотите изменить свой вопрос? – CaptJak