Сбой JavaScript в обратном вызове UIWebView «Начальная загрузка»

Я пытаюсь выполнить 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 с executeSelector: withObject : afterDelay: 0 , безрезультатно.

Есть идеи?

6
задан Ed McManus 18 August 2010 в 05:01
поделиться