Я пытаюсь выполнить JS до того, как сработает событие onLoad страницы.
Но у меня возникают проблемы с успешным вызовом stringByEvaluatingJavaScriptFromString
в методе делегата webViewDidStartLoad
.
Чтобы воспроизвести проблему, вы можете использовать следующий код.
Реализация делегата:
-(void)webViewDidStartLoad:(UIWebView *)webView {
[webView stringByEvaluatingJavaScriptFromString:@"window.valueHasBeenSet=true"];
}
Просмотреть этот HTML-код:
<html>
<head></head>
<body>
<script type="text/javascript" charset="utf-8">
if (window.valueHasBeenSet)
{
// We enter this branch the first time
document.write('<h3>Everything is OK. Value has been set.</h3>');
}
else
{
// We incorrectly enter this branch on reloads
document.write('<h3>Error. Value has not been set.</h3>');
}
</script>
<a href="javascript:window.location.reload()">Reload</a>
</body>
</html>
Эта страница работает в первом представлении («Все в порядке.»), Но происходит сбой при всех перезагрузках, независимо от способа перезагрузки.Как и следовало ожидать, это также не работает в делегате shouldStartLoadWithRequest
.
Я также попытался выполнить javascript сразу после webViewDidStartLoad
с performSelector:withObject:afterDelay:0
, но безрезультатно.
Есть идеи?